#include<stdio.h>#include<stdlib.h>#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef int ElemType; // 用ElemType来代替int类型typedef struct List{ ElemType *elem; int length; int listsize;}List;int OVERFLOW;#define ERRORvoid create_List(List &L,int n) //建立链表{ int i; L.elem=(ElemType *)malloc(LIST_INIT_SIZE * sizeof (ElemType));//给链表分配长度 L.listsize=LIST_INIT_SIZE; L.length=n; //链表的长度 for (i=0;i<n;i++) scanf("%d",&L.elem[i]); //输入链表的数据/* for(i=0;i<n;i++)//链表的数据按从小到大的顺序排列 { int first=0; if(L.elem[i]>L.elem[i+1]) { first=L.elem[i]; L.elem[i]=L.elem[i+1]; L.elem[i+1]=first; } }*/ for(i=0;i<n;i++) printf("%d ",L.elem[i]);//输出数据 printf("构建列表成功\n"); printf("\n");}void length_List(List L)//检查链表的长度{ printf("顺序表的长度 length_List=%d\n",L.length); int i; for(i=0;i<L.length;i++) { printf("%d ",L.elem[i]); } printf("\n"); }void insert_List(List &L,int i ,int e) //i表示插入链表的位置,e表示插入的元素{ if(i<1 || i> L.length+1)//判断i的位置是否在范围内 return ERROR; int *newbase; if(L.length >= L.listsize) newbase=(ElemType *)realloc(L.elem,(L.length+ LISTINCREMENT) * sizeof (ElemType));//储存空间不足时,增加分配 //if(!newbase) //exit(OVERFLOW);//判断是否分配成功 L.elem=newbase; L.listsize+=LISTINCREMENT;//分配后的链表的容量 ElemType *q,*p; q=&L.elem[i-1];//q表示插入的位置 for(p = &L.length-1;p>=q;p--) *(p+1)=*(p); *q=e; ++L.length;//链表的长度增加1}void delete_List(List &L,int i,int &e)//i表示删除的位置,e表示删除的元素{ //int i; if(i<1 || i>L.length+1)//判断删除的位置是否在范围内 return ERROR; int *q,*p; q=&L.elem[i-1];//q表示删除的位置,e表示删除的元素 e=*q; p=&L.length-1; for(q=&L.elem[i-1];q<p;q++) *(q) = *(q+1); L.length--;//链表减一}void union_List(/*List &La, int n,List &Lb,int n,*/List &Lc ,int n ){ //int i; List La,Lb; printf("请输入你需要构建的列表长度\n"); scanf("%d",&n); create_List(La,n); printf("这是表La\n"); printf("请输入你需要构建的列表长度\n"); scanf("%d",&n); create_List(Lb,n); printf("这是表La\n"); int *pc; Lc.length = La.length + Lb.length; Lc.elem=(ElemType *)malloc(Lc.length* sizeof (ElemType));//重新建立长度为La+Lb的链表Lc; pc=Lc.elem; if(!Lc.elem) exit(OVERFLOW);//判断是否建立成功 int *pa,*pb; pa=La.elem; pb=Lb.elem; int *pa_last,*pb_last; pa_last=&La.length-1; pb_last=&Lb.length-1; while(pa<=pa_last && pb<=pb_last) { if(*pa<=*pb) { if(*pa=*pb) { *pc++ = *pa; *pa++; *pb++; } else { *pc++ = *pa; *pa++; } } else { *pc++ = *pb; *pb++; } } while(pa<=pa_last) { *pc++ = *pa; *pa++; } while(pb<pb_last) { *pc++ = *pb; *pb++; }} int main(){ int n; int i; List L,Lc; int e; char choose; while(1) { printf("输入 1 ,建立链表\n"); printf("输入 2 ,检测链表的长度\n"); printf("输入 3 ,在链表中插入新的元素\n"); printf("输入 4 ,删除链表中的元素\n"); printf("输入 5 ,合并连个链表\n"); printf("输入 6 ,结束\n"); printf("你的选择: "); choose=getchar(); switch(choose) { case '1' : printf("请输入你需要构建的列表长度\n"); scanf("%d",&n); create_List(L,n); break; case '2' : length_List(L);break; case '3' : printf("请输入插入的位置,插入的数值\n"); scanf("%d,%d",&i,&e); insert_List(L,i,e); break; case '4' : printf("请输入删除元素的位置\n"); scanf("%d",&i); delete_List(L,i,e);break; case '5' : union_List(Lc,n);break; case '6' : break; default : printf("输入错误!/n");continue; } if(choose=='6') break; } /*printf("请输入你需要构建的列表长度\n"); scanf("%d",&n); create_List(L,n); length_List(L,n); printf("请输入插入的位置,插入的数值\n"); scanf("%d,%d",&i,&e); insert_List(L,i,e); printf("请输入删除元素的位置\n"); scanf("%d",&i); delete_List(L,i,e); union_List(La,Lb);*/ return 0;}
3 回答
已采纳
liganglester
TA贡献1条经验 获得超0个赞
估计不会有人来改你的程序
1 没说有什么问题。
2 贴这么长代码,没有标出重点。
为了让别人可以回答,你需要注意对方是否可以相对容易地理解你的意图,并进而回答你的问题。
communication.
- 3 回答
- 0 关注
- 2006 浏览
添加回答
举报
0/150
提交
取消