大佬教程收集整理的这篇文章主要介绍了C语言顺序表的实现代码,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
本文实例为大家分享了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); }
#include"seqList.h" voID main() { SeqList List; InitSeqList(&List); ElemType item; int pos; int SELEct = 1; while (SELEct) { printf("*******************************************\n"); printf("*[1] push_BACk [2] push_front *\n"); printf("*[3] show_List [4] pop_BACk *\n"); printf("*[5] pop_front [6] insert_pos *\n"); printf("*[7] find [8] length *\n"); printf("*[9] delete_pos [10] delete_value *\n"); printf("*[11] sort [12] reverse *\n"); printf("*[13] clear [14] merge *\n"); printf("*[0] quit_system *\n"); printf("*******************************************\n"); printf("请选择:>>"); scanf("%d",&SELEct); if (SELEct == 0) break; switch (SELEct) { case 1: printf("请输入要插入的数据(-1结束):>"); while (scanf("%d",&item),item != -1) {//先输入item的值,只要item不等于-1就接着循环 push_BACk(&List,item); } break; case 2: printf("请输入要插入的数据(-1结束):>"); while (scanf("%d",item != -1) { push_front(&List,item); } break; case 3: show_List(&List); break; case 4: pop_BACk(&List); break; case 5: pop_front(&List); break; case 6: printf("请输入要插入的数据:>"); scanf("%d",&item); printf("请输入要插入的位置:>"); scanf("%d",&pos); insert_pos(&List,pos,item); break; case 7: printf("请输入要查找的数据:>"); scanf("%d",&item); pos = find(&List,item); if (pos == -1) printf("查找的数据元素不在顺序表中!\n"); else printf("查找的数据元素在顺序表中的下标位置为%d\n",pos); break; case 8: printf("顺序表的长度为%d\n",length(&List)); break; case 9: printf("请输入要删除数据在顺序表中的下标位置:>"); scanf("%d",&pos); delete_pos(&List,pos); break; case 10: printf("请输入要删除数据的值:>"); scanf("%d",&item); delete_val(&List,item); break; case 11: sort(&List); break; case 12: reverse(&List); break; case 13: clear(&List); break; case 14: SeqList myList,yourList; ElemType item1,item2; InitSeqList(&myList); InitSeqList(&yourList); printf("请输入顺序表1中的元素值(-1结束):>"); while (scanf("%d",&item1),item1 != -1) { push_BACk(&myList,item1); } printf("请输入顺序表2中的元素值(-1结束):>"); while (scanf("%d",&item2),item2 != -1) { push_BACk(&yourList,item2); } merge(&List,&myList,&yourList); destroy(&myList); destroy(&yourList); break; default: printf("输入的选择错误!请重新输入!\n"); break; } } destroy(&List); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
以上是大佬教程为你收集整理的C语言顺序表的实现代码全部内容,希望文章能够帮你解决C语言顺序表的实现代码所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。