#include<stdio.h> #include<malloc.h> //typedef int ElemType; int k=1,f; typedef struct LNode{ int data; struct LNode *next; }LinkList; void InitList(LinkList *&L){ //创建头结点 L=(LinkList *)malloc(sizeof(LinkList)); L->next=NULL; } void DispList(LinkList *L){//输出线性表 LinkList *p=L->next; while(p!=NULL){ printf("%d ",p->data); p=p->next; } printf(" "); } int LocateElem(LinkList *L,int e){//按元素值查找 int i=1; LinkList *p=L->next; while(p!=NULL&&p->data!=e){ p=p->next; i++; } if(p==NULL) return(0); else return(i); } bool ListInsert(LinkList * &L,int i,int e){//插入 LinkList *p=L,*s,*q; q=p; p=p->next; while(p!=NULL){ if(p->data==i){ s=(LinkList *)malloc(sizeof(LinkList)); s->data=e; s->next=p; q->next=s; return true; } q=p; p=p->next; } if(p==NULL && i==-1){ s=(LinkList *)malloc(sizeof(LinkList)); s->data=e; s->next=NULL; q->next=s; return true; } return false; } void DestroyList(LinkList *&L){//销毁 LinkList *p=L,*q=p->next; while(q!=NULL){ free(p); p=q; q=p->next; } free(p); } bool ListDelete(LinkList *&L,int e){//删除 // int j=0; LinkList *p=L,*q; while(p!=NULL&&p->data!=e){ q=p; p=p->next; } if(p==NULL) return false; else{ q->next=p->next; free(p); return true; } } void ListHeBing(LinkList *&L1,LinkList *&L2){//合并 LinkList *p=L2->next; while(p!=NULL){ if(LocateElem(L1,p->data)) p=p->next; else{ ListInsert(L1,-1,p->data); p=p->next; } } } /*int main(){ LinkList *h,*h1,*h2; int e; InitList(h); printf("ssda "); ListInsert(h,-1,3); ListInsert(h,-1,9); ListInsert(h,-1,5); ListInsert(h,-1,6); ListInsert(h,-1,11); ListInsert(h,-1,8); printf("ssda "); DispList(h); ListInsert(h,5,4); ListInsert(h,5,7); DispList(h); ListDelete(h,11); DispList(h); InitList(h1); ListInsert(h1,-1,1); ListInsert(h1,-1,2); ListInsert(h1,-1,4); ListInsert(h1,-1,9); ListInsert(h1,-1,10); ListInsert(h1,-1,18); ListHeBing(h,h1); DispList(h); }*/ void CJList(LinkList *&L){ printf("输入你要创建的链表按回车键结束: "); int n; char c; while(scanf("%d%c",&n,&c)!=EOF&&c!=' '){ ListInsert(*&L,-1,n); } ListInsert(*&L,-1,n); printf("以下是你创建的链表: "); printf("h%d: ",k); DispList(*&L); return; } int main(){ // LinkList *h1,*h2,*h3; LinkList *h[50]; int e; int m,n; bool flag; printf("输入对应的序号进行操作: "); printf("创建链表请扣1: "); printf("插入数据请扣2: "); printf("删除数据请扣3: "); printf("合并链表请扣4: "); printf("查看链表请扣5: "); printf("销毁链表请扣6: "); printf("退出请按0: "); while(~scanf("%d",&e)){ if(e==1){ InitList(h[k]); CJList(h[k]); k++; } if(e==2){ printf("你是要对第几条链表进行插入操作?请输入一个合理的数字!! "); int y; scanf("%d",&y); printf("以下是你要插入的链表: "); DispList(h[y]); printf("输入两个数,第一个数是你要插入的数值,第二个是要插入哪个数值的前面: "); scanf("%d%d",&m,&n); flag=ListInsert(h[y],n,m); if(flag==true){ printf("插入成功!! "); printf("以下是你插入修改后的链表: "); printf("h%d: ",y); DispList(h[y]); } else printf("插入失败!! "); } if(e==3){ printf("你是要对第几条链表进行删除操作?请输入一个合理的数字!! "); int y; scanf("%d",&y); printf("以下是你要删除的链表: "); DispList(h[y]); printf("输入你要删除的元素: "); scanf("%d",&m); flag=ListDelete(h[y],m); if(flag==true){ printf("删除成功!! "); printf("以下是你删除后的链表: "); printf("h%d: ",y); DispList(h[y]); } else printf("删除失败!! "); } // DestroyList(h1); if(e==4){ int m,n; printf("接下来进行链表合并: "); printf("你要对哪两条链表进行合并?: "); scanf("%d%d",&m,&n); printf("以下是你要合并的两条链表: "); printf("h%d: ",m); DispList(h[m]); printf(" "); printf("h%d: ",n); DispList(h[n]); //InitList(h[k]); // CJList(h[k]); // f=k; // k++; // InitList(h[k]); // CJList(h[k]); ListHeBing(h[m],h[n]); printf("以下是你合并后的链表: "); printf("h%d: ",m); DispList(h[m]); k--; } if(e==5){ printf("你要查看第几条链表?请输入一个合理的数字,如果要查看所有数组请输入-1: "); int y; int i; scanf("%d",&y); if(y==-1){ for(i=1;i<k;i++){ printf("h%d: ",i); DispList(h[i]); } } else{ printf("以下是你要查看的第%d条链表: ",y); printf("h%d: ",y); DispList(h[y]); } } if(e==6){ printf("你要销毁第几条链表?请输入一个合理的数字,如果要销毁所有数组请输入-1: "); int y; int i; scanf("%d",&y); if(y==-1){ for(i=1;i<k;i++) DestroyList(h[i]); } else{ DestroyList(h[y]); for(i=y;i<k;i++){ h[i]=h[i+1]; k--; } } } if(e==0) exit(0); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf("输入对应的序号进行操作: "); printf("创建链表请扣1: "); printf("插入数据请扣2: "); printf("删除数据请扣3: "); printf("合并链表请扣4: "); printf("查看链表请扣5: "); printf("销毁链表请扣6: "); printf("退出请按0: "); } }