c锟斤拷锟斤拷吧 关注:34贴子:29
  • 0回复贴,共1

求助,链表的建立,删除,排序,编译没问题,但运行主程序到调用

只看楼主收藏回复

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define N 100
typedef struct Lnode
{ int data;
struct Lnode *next;
}Linknode;
void Createlist(Linknode *&L,int a[],int n);
bool Listinsert(Linknode *&L,int i,int e);
bool Listdelete(Linknode *&L,int i,int &e);
void sort(Linknode *&L);
void Displist(Linknode *&L);
int main(void)
{
Linknode *L;
int m=0,b,a[N],i,c,num,d,f;
bool b1;
L=(Linknode *)malloc(sizeof(Linknode));
L->next=NULL;
while(m<N){
scanf("%d",&num);
a[m++]=num;
char c=getchar();
if(c=='\n') break;
}
for(;;)
{
printf("创建(1),插入(2),删除(3),排序(4),显示(5):");
scanf("%d",&b);
switch(b){
case 1:Createlist(*&L,a,m);break;
case 2:{printf("插入数据的位置和内容:");
scanf("%d %d",&i,&d);
Listinsert(*&L,i,d);}break;
case 3:{printf("删除数据的位置:");
scanf("%d",&i);
b1=Listdelete(*&L,i,&f);
printf("%d\n",f);}break;
case 4:sort(*&L);break;
case 5:Displist(*&L);break;
case 0:exit(0);
}
}
return 0;
}
void Createlist(Linknode *&L,int a[],int n)
{ Linknode *s,*r;
L=(Linknode *)malloc(sizeof(Linknode));
r=L;
int i;
for(i=0;i<n;i++)
{ s=(Linknode *)malloc(sizeof(Linknode));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
bool Listinsert(Linknode *&L,int i,int e)
{ int j=0;
Linknode *p=L,*s;
if(i<=0) return false;
while(j<i-1&&p!=NULL)
{ j++;
p=p->next;
}
if(p==NULL) return false;
else {
s=(Linknode *)malloc(sizeof(Linknode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
}
bool Listdelete(Linknode *&L,int i,int &e)
{ int j=0;
Linknode *p=L,*q;
if(i<=0) return false;
while(j<i-1&&p!=NULL)
{ j++;
p=p->next;
}
if(p==NULL) return false;
else
{ q=p->next;
if(q=NULL) return false;
e=q->data;
p->next=q->next;
free(q);
return true;
}
}
void sort(Linknode *&L)
{ Linknode *p,*pre,*q;
p=L->next->next;
L->next->next=NULL;
while(p!=NULL)
{ q=p->next;
pre=L;
while((pre->next!=NULL)&&((pre->next->data)<(p->data)))
pre=pre->next;
p->next=pre->next;
pre->next=p;
p=q;
}
}
void Displist(Linknode *&L)
{ Linknode *p=L->next;
while(p->next!=NULL)
{ printf("%d ",p->data);
p=p->next;
}
printf("\n");
}


来自手机贴吧1楼2018-03-24 17:06回复