C实现的静态顺序表
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。顺序表的存储特点是:只要确定了起始位置,表中任一元素地址都可以求出。在c中实现顺序表时,由于函数较多,所以把函数的实现放在头文件中,在主函数中进行单元函数测试。SequenceList_Static.h#ifndef__SEQUENCELIST_STATIC_H__#define__SEQUENCELIST_STATIC_H__#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>typedefintDataType;//用typedef有利于顺序表存储类型的修改#defineMAX100//利用宏定义使得顺序表存储容量修改方便typedefstructSeqList{DataTypearr[MAX];intsize;}SeqList,*pSeqList;//顺序表的基本操作voidInitSeqList(pSeqListpSeq);voidPrintSeqList(SeqListSeq);voidPushBack(pSeqListpSeq,DataTypex);voidPopBack(pSeqListpSeq);voidPushFront(pSeqListpSeq,DataTypex);voidPopFront(pSeqListpSeq);voidInsert(pSeqListpSeq,intpos,DataTypex);intFind(SeqListSeq,DataTypex);voidRemove(pSeqListpSeq,DataTypex);voidRemoveAll(pSeqListpSeq,DataTypex);voidReverseList(pSeqListpSeq);voidSortList(pSeqListpSeq);intBinarySearch(SeqListSeq,DataTypex);//顺序表的初始化voidInitSeqList(pSeqListpSeq){assert(pSeq);memset(pSeq->arr,0,sizeof(pSeq->arr));pSeq->size=0;}//为了方便查看对顺序表进行打印voidPrintSeqList(SeqListSeq){inti=0;for(i=0;i<Seq.size;i++){printf("%d\t",Seq.arr[i]);}printf("over\n");}//存放数据voidPushBack(pSeqListpSeq,DataTypex){assert(pSeq);if(pSeq->size>=MAX)//顺序表的存放都应该先判断顺序表是否已满{printf("sequencelistisfull\n");}pSeq->arr[pSeq->size++]=x;}voidPopBack(pSeqListpSeq){assert(pSeq);if(pSeq->size==0){printf("Thesequencelistisempty\n");}pSeq->size--;}voidPushFront(pSeqListpSeq,DataTypex){inti=0;assert(pSeq);if(pSeq->size==MAX){printf("sequencelistisfull\n");return;}for(i=pSeq->size;i>0;i--){pSeq->arr[i]=pSeq->arr[i-1];}pSeq->arr[0]=x;pSeq->size++;}voidPopFront(pSeqListpSeq){inti=0;assert(pSeq);if(pSeq->size==0){printf("Thesequencelistisempty\n");return;}for(i=0;i<pSeq->size-1;i++){pSeq->arr[i]=pSeq->arr[i+1];}pSeq->size--;}voidInsert(pSeqListpSeq,intpos,DataTypex){inti=0;assert(pSeq);//插入的位置应该合法assert((pos<pSeq->size)&&(pos>=0));if(pSeq->size==MAX){printf("Thesequencelistisfull\n");return;}for(i=pSeq->size;i>pos;i--){pSeq->arr[i]=pSeq->arr[i-1];}pSeq->arr[pos]=x;pSeq->size++;}intFind(SeqListSeq,DataTypex){inti=0;for(i=0;i<Seq.size;i++){if(Seq.arr[i]==x){returni;}return-1;}}voidRemove(pSeqListpSeq,DataTypex){intpos=Find(*pSeq,x);inti=0;assert(pSeq);if(pos!=-1){for(i=pos;i<pSeq->size;i++){pSeq->arr[i]=pSeq->arr[i+1];}}pSeq->size--;}voidRemoveAll(pSeqListpSeq,DataTypex){inti=0;intj=0;assert(pSeq);for(i=0;i<pSeq->size;i++){if(pSeq->arr[i]==x){for(j=i;j<pSeq->size;j++){pSeq->arr[j]=pSeq->arr[j+1];}pSeq->size--;}}}voidReverseList(pSeqListpSeq){intstart=0;intend=pSeq->size-1;DataTypetmp=0;while(start<end){tmp=pSeq->arr[start];pSeq->arr[start]=pSeq->arr[end];pSeq->arr[end]=tmp;start++;end--;}}//冒泡排序voidSortList(pSeqListpSeq){inti=0;intj=0;assert(pSeq);for(i=0;i<pSeq->size-1;i++){for(j=0;j<pSeq->size-1-i;j++){if(pSeq->arr[j]>pSeq->arr[j+1]){DataTypetmp=pSeq->arr[j];pSeq->arr[j]=pSeq->arr[j+1];pSeq->arr[j+1]=tmp;}}}}intBinarySearch(SeqListSeq,DataTypex){intleft=0;intright=Seq.size-1;while(left<=right)//应该注意边界条件{intmid=left-((left-right)>>1);if(Seq.arr[mid]>x){right=mid-1;}elseif(Seq.arr[mid]==x){returnmid;}else{left=mid+1;}}return-1;}#endif//__SEQUENCELIST_STATIC_H__以下是对函数的测试:test.c#include"SequenceList_Static.h"voidTest1(){SeqListmyseqlist;InitSeqList(&myseqlist);PushBack(&myseqlist,1);PushBack(&myseqlist,2);PushBack(&myseqlist,3);PrintSeqList(myseqlist);}voidTest2(){SeqListmyseqlist;InitSeqList(&myseqlist);PushBack(&myseqlist,1);PushBack(&myseqlist,2);PushBack(&myseqlist,3);PrintSeqList(myseqlist);PopBack(&myseqlist);PrintSeqList(myseqlist);}voidTest3(){SeqListmyseqlist;InitSeqList(&myseqlist);PushFront(&myseqlist,3);PushFront(&myseqlist,2);PushFront(&myseqlist,1);PushFront(&myseqlist,0);PrintSeqList(myseqlist);}voidTest4(){SeqListmyseqlist;InitSeqList(&myseqlist);PushFront(&myseqlist,3);PushFront(&myseqlist,2);PushFront(&myseqlist,1);PushFront(&myseqlist,0);PrintSeqList(myseqlist);PopFront(&myseqlist);PopFront(&myseqlist);PopFront(&myseqlist);PopFront(&myseqlist);PopFront(&myseqlist);PrintSeqList(myseqlist);}voidTest5(){SeqListmyseqlist;InitSeqList(&myseqlist);PushBack(&myseqlist,1);PushBack(&myseqlist,2);PushBack(&myseqlist,3);PrintSeqList(myseqlist);Insert(&myseqlist,0,0);PrintSeqList(myseqlist);}voidTest6(){SeqListmyseqlist;InitSeqList(&myseqlist);PushBack(&myseqlist,1);PushBack(&myseqlist,2);PushBack(&myseqlist,3);PrintSeqList(myseqlist);Remove(&myseqlist,1);PrintSeqList(myseqlist);}voidTest7(){SeqListmyseqlist;InitSeqList(&myseqlist);PushBack(&myseqlist,1);PushBack(&myseqlist,2);PushBack(&myseqlist,3);PrintSeqList(myseqlist);ReverseList(&myseqlist);PrintSeqList(myseqlist);}voidTest8(){SeqListmyseqlist;InitSeqList(&myseqlist);PushBack(&myseqlist,2);PushBack(&myseqlist,5);PushBack(&myseqlist,1);PushBack(&myseqlist,3);PushBack(&myseqlist,4);PrintSeqList(myseqlist);SortList(&myseqlist);PrintSeqList(myseqlist);}voidTest9(){intret=0;SeqListmyseqlist;InitSeqList(&myseqlist);PushBack(&myseqlist,1);PushBack(&myseqlist,2);PushBack(&myseqlist,3);PushBack(&myseqlist,4);PushBack(&myseqlist,5);PrintSeqList(myseqlist);ret=BinarySearch(myseqlist,5);printf("%d\n",ret);}voidTest10(){SeqListmyseqlist;InitSeqList(&myseqlist);PushBack(&myseqlist,1);PushBack(&myseqlist,2);PushBack(&myseqlist,3);PushBack(&myseqlist,1);PushBack(&myseqlist,5);PrintSeqList(myseqlist);RemoveAll(&myseqlist,1);PrintSeqList(myseqlist);}intmain(){Test10();system("pause");return0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。