C说话次序表的实当代码
发布时间:2020-12-29 06:41:59 所属栏目:创业 来源:网络整理
导读:本文实例为各人分享了C说话实现次序表的详细代码,供各人参考,详细内容如下 seqlist.h #ifndef __SEQLIST_H__#define __SEQLIST_H__#includecstdio#includemalloc.h#includeassert.h#define SEQLIST_INIT_SIZE 8#define INC_SIZE 3 //空间增量的巨细typedef
副问题[/!--empirenews.page--]
本文实例为各人分享了C说话实现次序表的详细代码,供各人参考,详细内容如下 seqlist.h #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include<cstdio> #include<malloc.h> #include<assert.h> #define SEQLIST_INIT_SIZE 8 #define INC_SIZE 3 //空间增量的巨细 typedef int ElemType; typedef struct Seqlist { ElemType *base; int capacity; //次序表容量 int size; //表的巨细 }Seqlist; bool Inc(Seqlist *list);//增进次序表的容量 void InitSeqlist(Seqlist *list); //初始化次序表 void push_back(Seqlist *list,ElemType x); //在次序表的末端插入元素 void push_front(Seqlist *list,ElemType x); //在次序表的头部插入元素 void show_list(Seqlist *list); //表现次序表中的元素 void pop_back(Seqlist *list); //删除次序表最后一个元素 void pop_front(Seqlist *list); //删除次序表第一个元素 void insert_pos(Seqlist *list,int pos,ElemType x);//在次序表的选定位置上插入数据 int find(Seqlist *list,ElemType key); //在次序表中查找元素key的下标 int length(Seqlist *list);//求次序表的长度 void delete_pos(Seqlist *list,int pos); //删除次序表中特定位置的数据元素 void delete_val(Seqlist *list,int key);//删除次序表中值为key的数据元素 void sort(Seqlist *list);//冒泡排序 void reverse(Seqlist *list);//逆置次序列表 void clear(Seqlist *list);//破除次序表中的全部元素 void destroy(Seqlist *list);//摧毁次序表 void merge(Seqlist *lt,Seqlist *la,Seqlist *lb);//归并两个次序列表 #endif //__SEQLIST_H__ seqlist.cpp #include"seqlist.h" bool Inc(Seqlist *list) { ElemType *newbase = (ElemType*)realloc(list,sizeof(ElemType)*(list->capacity + INC_SIZE)); //从头分派内存空间 if (newbase == NULL) { printf("内存空间已满,无法再分派内存空间!n"); return false; } list->base = newbase; list->capacity += INC_SIZE; return true; } void InitSeqlist(Seqlist *list) { list->base = (ElemType*)malloc(sizeof(ElemType)*SEQLIST_INIT_SIZE); assert(list->base != NULL); list->capacity = SEQLIST_INIT_SIZE; list->size = 0; } void push_back(Seqlist *list,ElemType x) { if (list->size >= list->capacity && !Inc(list)) { //Inc(list)用来判定增进次序表容量是否乐成,只有在失败的环境下才会进入if语句中 printf("次序表容量已满,无法再在表尾继承插入新元素!n"); return; } list->base[list->size] = x; list->size++; } void push_front(Seqlist *list,ElemType x) { if (list->size >= list->capacity && !Inc(list)) { printf("次序表容量已满,无法再在表头插入新元素!n"); return; } for (int i = list->size;i > 0;i--) { list->base[i] = list->base[i - 1]; } list->base[0] = x; list->size++; } void show_list(Seqlist *list) { for (int i = 0;i < list->size;i++) { printf("%d ",list->base[i]); } printf("n"); } void pop_back(Seqlist *list) { if (list->size == 0) { printf("次序表已空,无法再在表尾删除元素!n"); return; } list->size--; } void pop_front(Seqlist *list) { if (list->size == 0) { printf("次序表已空,无法再在表头删除元素!n"); return; } for (int i = 0;i < list->size - 1;i++) { list->base[i] = list->base[i + 1]; } list->size--; } void insert_pos(Seqlist *list,ElemType x) { if (pos<0 || pos>list->size) { printf("插入位置不正当,无法插入元素!n"); return; } if (list->size >= list->capacity && !Inc(list)) { printf("次序表容量已满,无法在插入新的元素!n"); return; } for (int i = list->size;i > pos;i--) { list->base[i] = list->base[i - 1]; } list->base[pos] = x; list->size++; } int find(Seqlist *list,ElemType key) { for (int i = 0;i < list->size;i++) { if (list->base[i] == key) return i; } return -1; } int length(Seqlist *list) { return list->size; } void delete_pos(Seqlist *list,int pos) { if (pos < 0 || pos >= list->size) { printf("删除位置不正当,无法删除元素!n"); return; } for (int i = pos;i < list->size - 1;i++) { list->base[i] = list->base[i + 1]; } list->size--; } void delete_val(Seqlist *list,int key) { int pos = find(list,key); if (pos == -1) { printf("次序表中没有这个元素!n"); return; } delete_pos(list,pos); } void sort(Seqlist *list) { for (int i = 0;i < list->size - 1;i++) {//排序的趟数(譬喻5个数据必要较量4趟) for (int j = 0;j < list->size - 1 - i;j++) {//每一趟较量中的较量次数(譬喻5个数据在第0趟必要较量4次) if (list->base[j] > list->base[j + 1]) { ElemType temp = list->base[j]; list->base[j] = list->base[j + 1]; list->base[j + 1] = temp; } } } } void reverse(Seqlist *list) { if (list->size == 0 || list->size == 1) return; int low = 0,high = list->size - 1; while (low < high) { ElemType temp = list->base[low]; list->base[low] = list->base[high]; list->base[high] = temp; low++; high--; } } void clear(Seqlist *list) { list->size = 0; } void destroy(Seqlist *list) { free(list->base); list->base = NULL; list->capacity = 0; list->size = 0; } void merge(Seqlist *lt,Seqlist *lb) { lt->capacity = la->size + lb->size; lt->base = (ElemType*)malloc(sizeof(ElemType)*lt->capacity); assert(lt->base != NULL); int ia = 0,ib = 0,ic = 0; while (ia < la->size&&ib < lb->size) { if (la->base[ia] < lb->base[ib]) { lt->base[ic++] = la->base[ia++]; } else { lt->base[ic++] = lb->base[ib++]; } } while (ia < la->size) { lt->base[ic++] = la->base[ia++]; } while (ib < lb->size) { lt->base[ic++] = lb->base[ib++]; } lt->size = la->size + lb->size; show_list(lt); } (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |