帮忙修改一下

#include<stdio.h>

#include<stdlib.h>

#define LIST_INIT_SIZE 100

#define LISTINCREMENT 10

typedef int ElemType;    // 用ElemType来代替int类型

typedef struct List{

ElemType *elem;

int length;

int listsize;

}List;

int OVERFLOW;

#define  ERROR


void 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;

}




袁力
浏览 2007回答 3
3回答

liganglester

估计不会有人来改你的程序1 没说有什么问题。2 贴这么长代码,没有标出重点。为了让别人可以回答,你需要注意对方是否可以相对容易地理解你的意图,并进而回答你的问题。communication.

袁力

哦.还是谢谢

思君满月

楼上说的有理
打开App,查看更多内容
随时随地看视频慕课网APP