C语言实现静态顺序表的实例详解
C语言实现静态顺序表的实例详解
线性表
定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识。只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作。
接下来看看静态的顺序表,直接上代码:
SeqList.h
#define_CRT_SECURE_NO_WARNINGS1 #ifndef__SEQLIST_H__ #define__SEQLIST_H__ #include#include #include #include #defineMAX10 typedefintDataType; typedefstructSeqList { DataTypedata[MAX]; intsz; }SeqList,*pSeqList; voidInitSeqList(pSeqListps); voidPushBack(pSeqListps,DataTyped); voidPopBack(pSeqListps); voidPushFront(pSeqListps,DataTyped); voidPopFront(pSeqListps); voidDisplay(constpSeqListps); intFind(pSeqListps,DataTyped); voidInsert(pSeqListps,DataTyped,intpos); voidRemove(pSeqListps,DataTyped); voidRemoveAll(pSeqListps,DataTyped); voidReverse(pSeqListps); voidSort(pSeqListps); intBinarySearch(pSeqListps,DataTyped); #endif//__SEQLIST_H__
SeqList.c
#define_CRT_SECURE_NO_WARNINGS1 #include"SeqList.h" voidInitSeqList(pSeqListps) { assert(ps); ps->sz=0; memset(ps->data,0,sizeof(DataType)*MAX); } voidPushBack(pSeqListps,DataTyped) { assert(ps); if(ps->sz==MAX) { return; } ps->data[ps->sz]=d; ps->sz++; } voidPopBack(pSeqListps) { assert(ps); if(ps->sz==0) { return; } ps->sz--; } voidPushFront(pSeqListps,DataTyped) { inti=0; assert(ps); for(i=ps->sz;i>=1;i--) { ps->data[i]=ps->data[i-1]; } ps->data[0]=d; ps->sz++; } voidPopFront(pSeqListps) { inti=0; assert(ps); for(i=0;isz;i++) { ps->data[i]=ps->data[i+1]; } ps->sz--; } voidDisplay(constpSeqListps) { inti=0; assert(ps); for(i=0;i sz;i++) { printf("%d",ps->data[i]); } printf("\n"); } intFind(pSeqListps,DataTyped) { inti=0; assert(ps); for(i=0;i sz;i++) { if(ps->data[i]==d) { returni; } } return-1; } voidInsert(pSeqListps,DataTyped,intpos) { inti=0; assert(ps); if(ps->sz==MAX) { return; } //方式一 //for(i=ps->sz-1;i>=pos;i--) //{ //ps->data[i+1]=ps->data[i]; //} //方式二 memmove(ps->data+pos+1,ps->data+pos,sizeof(DataType)*(ps->sz-pos)); ps->data[pos]=d; ps->sz++; } voidRemove(pSeqListps,DataTyped) { inti=0; intpos=0; assert(ps); pos=Find(ps,d); if(pos!=-1) { for(i=pos;i sz;i++) { ps->data[i]=ps->data[i+1]; } ps->sz--; } } voidRemoveAll(pSeqListps,DataTyped) { inti=0; intpos=0; assert(ps); pos=Find(ps,d); while((pos=Find(ps,d))!=-1) { for(i=pos;i sz;i++) { ps->data[i]=ps->data[i+1]; } ps->sz--; } } voidReverse(pSeqListps) { intleft=0; intright=ps->sz-1; assert(ps); while(left data[right]; ps->data[right]=ps->data[left]; ps->data[left]=tmp; left++; right--; } } voidSort(pSeqListps) { inti=0; intj=0; assert(ps); for(i=0;i sz;i++) { for(j=0;j sz-i-1;j++) { if(ps->data[j]>ps->data[j+1]) { DataTypetmp=ps->data[j]; ps->data[j]=ps->data[j+1]; ps->data[j+1]=tmp; } } } } intBinarySearch(pSeqListps,DataTyped) { intleft=0; intright=ps->sz-1; while(left<=right) { intmid=left-((left-right)>>1); if(d>ps->data[mid]) { left=mid+1; } elseif(d data[mid]) { right=mid-1; } else { returnmid; } } return-1; }
test.c
#define_CRT_SECURE_NO_WARNINGS1 #include"SeqList.h" voidtest1() { SeqListlist; InitSeqList(&list); PushBack(&list,1); PushBack(&list,2); PushBack(&list,3); PushBack(&list,4); Display(&list); PopBack(&list); Display(&list); PopBack(&list); Display(&list); PopBack(&list); Display(&list); PopBack(&list); Display(&list); } voidtest2() { intpos=0; SeqListlist; InitSeqList(&list); PushFront(&list,1); PushFront(&list,2); PushFront(&list,3); PushFront(&list,2); PushFront(&list,4); PushFront(&list,2); Display(&list); pos=Find(&list,3); printf("%d\n",list.data[pos]); PopFront(&list); Display(&list); PopFront(&list); Display(&list); PopFront(&list); Display(&list); PopFront(&list); Display(&list); } voidtest3() { intpos=0; SeqListlist; InitSeqList(&list); PushFront(&list,1); PushFront(&list,2); PushFront(&list,3); PushFront(&list,2); PushFront(&list,4); PushFront(&list,2); Display(&list); Insert(&list,6,2); Display(&list); Remove(&list,1); Display(&list); RemoveAll(&list,2); Display(&list); } voidtest4() { intpos=0; SeqListlist; InitSeqList(&list); PushFront(&list,1); PushFront(&list,2); PushFront(&list,3); PushFront(&list,2); PushFront(&list,4); Display(&list); Reverse(&list); Display(&list); Sort(&list); Display(&list); pos=BinarySearch(&list,3); printf("%d\n",list.data[pos]); } intmain() { test4(); system("pause"); return0; }
动态顺序表的实现:https://www.nhooo.com/article/120876.htm
以上使用C语言动态顺序表的实现如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。