1、线性表#include#include#define SIZE 20#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef struct ElemType *elem; int length; int listsize; SqList;int flag1=1,flag2=1;Status InitList(SqList &L,int size);Status GetElem(SqList L,int i,ElemType &e);void PriorElem(Sq
2、List LA,SqList LB);void Prior_LElem(SqList L,int Flag);void NextElem(SqList LA,SqList LB);void Next_LElem(SqList L,int Flag);void ListInsert(SqList &LA,SqList &LB);void ListInsert_L(SqList &L,int Flag);void ListDelete(SqList &LA,SqList &LB);void Delete_LElem(SqList &L,int Flag);void ClearList(SqList
3、 &LA,SqList &LB);void DestoryList(SqList &LA,SqList &LB,SqList &LC);void MergeList(SqList LA,SqList LB,SqList &LC);void Output(SqList LA,SqList LB,SqList LC);void output_L(SqList L);void main() int a=1; SqList LA,LB,LC; InitList(LA,SIZE); InitList(LB,SIZE); InitList(LC,2*SIZE); ListInsert_L(LA,flag1
4、); ListInsert_L(LB,flag2); system(cls); while(a) printf(nn); printf(ttt 主 菜 单nn); printf(tt-nn); printf(ttt1输 出 前 驱nn); printf(ttt2输 出 后 继nn); printf(ttt3插 入 元 素nn); printf(ttt4删 除 元 素nn); printf(ttt5置 空 线 性 表nn); printf(ttt6销 毁 线 性 表nn); printf(ttt7合 并 线 性 表nn); printf(ttt8输 出 线 性 表nn); printf(ttt0
5、退 出n); scanf(%d,&a); switch(a) case 1: system(cls); PriorElem(LA,LB); system(cls); break; case 2: system(cls); NextElem(LA,LB); system(cls); break; case 3: system(cls); ListInsert(LA,LB); system(cls); break; case 4: system(cls); ListDelete(LA,LB); system(cls); break; case 5: system(cls); ClearList(L
6、A,LB); system(cls); break; case 6: system(cls); DestoryList(LA,LB,LC); system(cls); break; case 7: system(cls); MergeList(LA,LB,LC); system(cls); break; case 8: system(cls); Output(LA,LB,LC); system(cls); break; case 0: system(cls); printf(nnnnnnnntttt 谢谢使用nnnnnnnnnnnn); break; Status InitList(SqLis
7、t &L,int size) L.elem=(ElemType *)malloc(size*sizeof(ElemType); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=size; return OK;Status GetElem(SqList L,int i,ElemType &e) if(iL.length) return ERROR; e=L.elemi-1; return OK;void PriorElem(SqList LA,SqList LB) int a; printf(nn); printf(ttt 主 菜 单nn);
8、 printf(tt-nn); printf(ttt1输出LA中元素的前驱nn); printf(ttt2输出LB中元素的前驱nn); printf(ttt3退出n); scanf(%d,&a); switch(a) case 1: system(cls); Prior_LElem(LA,flag1); system(cls); break; case 2: system(cls); Prior_LElem(LB,flag2); system(cls); break; case 3: system(cls); break; void Prior_LElem(SqList L,int Flag)
9、 int a,e,i,flag=0; if(L.length=0) printf(线性表已被置空); else if(Flag=0) printf(线性表已被销毁); else printf(请输入输出前驱的元素:);G: scanf(%d,&a); for(i=1;i=L.length;i+) GetElem(L,i,e); if(a=e) flag=1; if(i=1) printf(nn元素%d没有前驱,a); break; GetElem(L,i-1,e); printf(nn元素%d的前驱是:%d,a,e); if(flag=0) printf(nn你输的数据不在线性表中,请重新输入
10、:); goto G; printf(nnnnnn按Enter键); getchar();getchar();void NextElem(SqList LA,SqList LB) int a; printf(nn); printf(ttt 主 菜 单nn); printf(tt-nn); printf(ttt1输 出 LA 中 元 素 的 后 继nn); printf(ttt2输 出 LB 中 元 素 的 后 继nn); printf(ttt3退 出n); scanf(%d,&a); switch(a) case 1: system(cls); Next_LElem(LA,flag1); sy
11、stem(cls); break; case 2: system(cls); Next_LElem(LB,flag2); system(cls); break; case 3: system(cls); break; void Next_LElem(SqList L,int Flag) int a,e,i,flag=0; if(L.length=0) printf(线性表已被置空); else if(Flag=0) printf(线性表已被销毁); else printf(请输入输出后继的元素:);I: scanf(%d,&a); for(i=1;i=L.length;i+) GetElem(
12、L,i,e); if(a=e) flag=1; if(i=L.length) printf(nn元素%d没有后继,a); break; GetElem(L,i+1,e); printf(nn元素%d的后继是:%d,a,e); if(flag=0) printf(nn你输的数据不在线性表中,请重新输入:); goto I; printf(nnnnnn按Enter键); getchar();getchar();void ListInsert(SqList &LA,SqList &LB) int a; printf(nn); printf(ttt 主 菜 单nn); printf(tt-nn); p
13、rintf(ttt1在 LA 中 插 入 元 素nn); printf(ttt2在 LB 中 插 入 元 素nn); printf(ttt3退 出n); scanf(%d,&a); switch(a) case 1: system(cls); ListInsert_L(LA,flag1); system(cls); break; case 2: system(cls); ListInsert_L(LB,flag2); system(cls); break; case 3: system(cls); break; void ListInsert_L(SqList &L,int Flag) int
14、 a,b,i,*p,*q; if(Flag=0) printf(线性表已被销毁); else if(L.length=0) printf(请在线性表中输入数据,输入0结束(0不作为线性表中的数据)n); for(i=0;i0&L.lengthSIZE) printf(请输入要插入的数据:);A: scanf(%d,&a); for(i=0;iL.length|b=q;-p) *(p+1)=*p; *q=a; +L.length; printf(n数据%d已插入到线性表中,a); else printf(线性表已存满); void ListDelete(SqList &LA,SqList &LB
15、) int a; printf(nn); printf(ttt 主 菜 单nn); printf(tt-nn); printf(ttt1删 除 LA 中 的 元 素nn); printf(ttt2删 除 LB 中 的元 素nn); printf(ttt3退 出n); scanf(%d,&a); switch(a) case 1: system(cls); Delete_LElem(LA,flag1); system(cls); break; case 2: system(cls); Delete_LElem(LB,flag2); system(cls); break; case 3: syst
16、em(cls); break; void Delete_LElem(SqList &L,int Flag) int a,*p,*q,flag=0,i; if(L.length=0) printf(线性表已被置空); else if(Flag=0) printf(线性表已被销毁); else printf(请输入要删除的数据:);E: scanf(%d,&a); for(i=0;iL.length;i+) if(a=L.elemi) flag=1; break; if(flag=0) printf(n数据%d不在线性表中,请重新输入:,a); goto E; p=&(L.elemi); q=L.
17、elem+L.length-1; for(+p;p=q;+p) *(p-1)=*p; -L.length; printf(第%d个元素%d已被删除n,i+1,a); printf(nnn按Enter键); getchar();getchar(); void ClearList(SqList &LA,SqList &LB) int a; printf(nn); printf(ttt 主 菜 单nn); printf(tt-nn); printf(ttt1将 LA 置 为 空 表nn); printf(ttt2将 LB 置 为 空 表nn); printf(ttt3将 LA 和 LB 置 为 空
18、表nn); printf(ttt4退 出n); scanf(%d,&a); switch(a) case 1: system(cls); LA.length=0; printf(已将LA表置为空表n); printf(nnn按Enter键); getchar();getchar(); system(cls); break; case 2: system(cls); LB.length=0; printf(已将LB表置为空表n); printf(nnn按Enter键); getchar();getchar(); system(cls); break; case 3: system(cls); L
19、A.length=0; LB.length=0; printf(已将LA和LB表置为空表n); printf(nnn按Enter键); getchar();getchar(); system(cls); break; case 4: system(cls); break; void DestoryList(SqList &LA,SqList &LB,SqList &LC) int a; printf(nn); printf(ttt 主 菜 单nn); printf(tt-nn); printf(ttt1删 除 LA 表nn); printf(ttt2删 除 LB 表nn); printf(tt
20、t3删 除 LA 和 LB 表nn); printf(ttt4退 出n); scanf(%d,&a); switch(a) case 1: system(cls); free(LA.elem); flag1=0; printf(已删除LA表n); printf(nnn按Enter键); getchar();getchar(); system(cls); break; case 2: system(cls); free(LB.elem); flag2=0; printf(已删除LB表n); printf(nnn按Enter键); getchar();getchar(); system(cls);
21、 break; case 3: system(cls); free(LA.elem); flag1=0; free(LB.elem); flag2=0; printf(已删除LA和LB表n); printf(nnn按Enter键); getchar();getchar(); system(cls); break; case 4: system(cls); break; void MergeList(SqList LA,SqList LB,SqList &LC) int *pa,*pb,*pc,*pa_last,*pb_last; pa=LA.elem; pb=LB.elem; pc=LC.el
22、em; pa_last=LA.elem+LA.length-1; pb_last=LB.elem+LB.length-1; while(pa=pa_last&pb=pb_last) if(*pa*pb) *pc+=*pa+; LC.length+; else if(*pa=*pb) *pc+=*pa+; pb+; LC.length+; else *pc+=*pb+; LC.length+; while(pa=pa_last) *pc+=*pa+; LC.length+; while(pb=pb_last) *pc+=*pb+; LC.length+; printf(已将LA和LB合并到LC中
23、); printf(nnn按Enter键); getchar();getchar(); system(cls);void Output(SqList LA,SqList LB,SqList LC) int a,b,c,d,i; printf(nn); printf(ttt 主 菜 单nn); printf(tt-nn); printf(ttt1输 出 LA 表nn); printf(ttt2输 出 LB 表nn); printf(ttt3输 出 LC 表nn); printf(ttt4输 出 LA、LB 和 LC 表nn); printf(ttt5退 出n); scanf(%d,&a); switch(a)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1