求构建一个线性表的完整程序 数据结构C语言版????
/*~~~~~~~~~~~~~~~~~~顺序表存储结构及常见操作(seqlist。c)~~~~~~~~~~~~~~~~*/#ifndef __SEQLIST__#define __SEQLIST__#include /*顺序表存储空间长度的最小值*/#define LISTMINSIZE 10/*顺序表存储结构类型定义*/typedef struct{ ListDT *base; /*顺序表空间基地址*/ int listsize; /*顺序表空间尺寸*/ int len; /*顺序表长度*/}SeqList;/*顺序表初始化*/void ListInitialize(SeqList *p...全部
/*~~~~~~~~~~~~~~~~~~顺序表存储结构及常见操作(seqlist。c)~~~~~~~~~~~~~~~~*/#ifndef __SEQLIST__#define __SEQLIST__#include /*顺序表存储空间长度的最小值*/#define LISTMINSIZE 10/*顺序表存储结构类型定义*/typedef struct{ ListDT *base; /*顺序表空间基地址*/ int listsize; /*顺序表空间尺寸*/ int len; /*顺序表长度*/}SeqList;/*顺序表初始化*/void ListInitialize(SeqList *pL, int size){ if(sizelistsize=size; pL->base=(ListDT *)malloc(pL->listsize*sizeof(ListDT)); if(!pL->base) exit(EXIT_FAILURE); pL->len =0; /*初始化空表*/}/*按给定的下标取顺序表元素值*/BOOL ListElem(SeqList L, int index, ListDT *pelem){ BOOL flg=TRUE; if(indexL。
len-1 ) flg=FALSE; /*参数越界*/ else *pelem=L。base[index]; return flg;}/*求顺序表长度*/int ListLen(SeqList L){ return L。
len; }/*在顺序表中指定序号位置插入元素*/BOOL ListInsert(SeqList *pL, int pos, ListDT d){ BOOL flg=TRUE; int i; if(poslen>=pL->listsize || pos>pL->len) flg=FALSE; else { for(i=pL->len-1; i>=pos; i--) /*移动数据*/ pL->base[i 1]=pL->base[i]; pL->base[pos]=d; /*写入数据*/ pL->len ; /*表长增1*/ } return flg;}/*把顺序表中指定序号的元素删除*/BOOL ListDel(SeqList *pL, int pos){ BOOL flg=TRUE; int i; if(pos=pL->len) flg=FALSE; else { for(i=pos 1; ilen; i ) /*移动数据*/ pL->base[i-1]=pL->base[i]; pL->len--; /*表长增1*/ } return flg;}/*在顺序表中查找元素*/int ListLoc(SeqList L, ListDT d,BOOL (*equal)(ListDT, ListDT)){ int pos=L。
len-1; while(pos>=0 && !(*equal)(L。base[pos],d)) pos--; return pos;}/*取前导元素序号位置*/BOOL ListPrior(SeqList L, int pos, int *ppriorpos){ BOOL flg=TRUE; if(pos>0 && pos=0 && pos *pnextpos=pos 1; else flg=FALSE; return flg;}/*销毁顺序表*/void ListDestroy(SeqList L){ free(L。
base);}#endif/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*//*建议性测试用程序*/typedef enum {TRUE=1,FALSE=0} BOOL;typedef int ListDT;#include "seqlist。
c"void printSeqList(SeqList L){ int i; ListDT x; printf("List:"); for(i=0; i { ListElem(L,i,&x); printf("=",x); }}BOOL dataequal(int x, int y){ return (x==y)? TRUE:FALSE;}#define N 5void main(){ int i,prior,next; ListDT x,test[N]={10,20,30,40,50}; SeqList L; /*初始化顺序表*/ ListInitialize(&L,N); /*在表头插入N个元素*/ for(i=0; i ListInsert(&L,0,test[i]); printSeqList(L); /*删除元素*/ ListDel(&L,N/2); printSeqList(L); printf("input a key:"); scanf("%d",&x); /*查找x在表中位置*/ i=ListLoc(L,x,dataequal); /*求x的前导元素*/ if(ListPrior(L,i,&prior)) { ListElem(L,prior,&x); printf("Prior:%d",x); } else printf("no Prior。
"); /*求x的后继*/ if(ListNext(L,i,&next)) { ListElem(L,next,&x); printf("Next:%d",x); } else printf("no Next。
"); /*求表长*/ printf("List length=%d",ListLen(L)); /*销毁顺序表*/ ListDestroy(L);}。收起