永发信息网

线性表求助(调试不好)

答案:2  悬赏:0  手机版
解决时间 2021-04-13 00:59

#include "stdio.h"
#include "stdlib.h"

typedef struct node
{ int data;
struct node *next;
}LNode,*LinkList;

LinkList Creat_LinkList()
{ int x;
LinkList H=(LinkList)malloc(sizeof(LNode));
H->next=NULL;
LNode *s ;
scanf("%d",&x);
while(x!=-1)
{ s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=H->next;
H->next=s;
scanf("%d",&x);
}
return H;
}

LinkList Get_LinkList(LinkList H,int k)
{ LNode *p=H;
int j=0;
while(p->next!=NULL&&j<k)
{ p=p->next; j++; }
if(j==k) return p;
else return NULL;
}

void Insert_LinkList(LinkList H,int i, int x)
{ LNode *p,*s;
p=Get_LinkList(H,i-1);
if (p==NULL)
{ printf("插入位置错误~!"); }
else
{ s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=p->next;
p->next=s;

}
}


void Del_LinkList(LinkList H,int i)
{ LinkList p,q;
p=Get_LinkList(H,i-1);
if(p==NULL)
{ printf("第i-1个节点不存在"); }
else
{ if(p->next==NULL)
{ printf("第i个节点不存在"); }
else
{q=p->next;
p->next=q->next;
free(q);
}
}
}


void Print_LinkList(LNode *L)
{ int i;
printf("线性表是:");
for( ;L!=NULL; )
{ printf("%d",L->data); L=L->next; }
}


void main()
{ int j=-1,i;
int x;
LNode *H;
H=Creat_LinkList( );
Print_LinkList(H->next);
while(j)
{ printf(" 请选择你的操作:");
printf("1:插入操作");
printf("2:删除操作");
printf("0:退出");
scanf("%d",&j);
switch(j)
{ case 0 : printf("没有操作,退出"); break;
case 1 : printf("请输入你要插入的数和位置:");
scanf("%d%d",&x,&i);
Insert_LinkList(H,i,x);
Print_LinkList(H->next);
break;
case 2 : printf("请输入你要删除的数的位置:");
scanf("%d",&i);
Del_LinkList(H, i);
Print_LinkList(H->next);
break;
default : printf("选择错误~!");
}
}
}

最佳答案

调试好了:

#include "stdio.h"
#include "stdlib.h"

typedef struct node
{ int data;
struct node *next;
}LNode,*LinkList;

LinkList Creat_LinkList()
{ int x;
LinkList H=(LinkList)malloc(sizeof(LNode));
H->next=NULL;
LNode *s ;
scanf("%d",&x);
while(x!=-1)
{ s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=H->next;
H->next=s;
scanf("%d",&x);
}
return H;
}

LinkList Get_LinkList(LinkList H,int k)
{ LNode *p=H;
int j=0;
while(p->next!=NULL&&j<k)
{ p=p->next; j++; }
if(j==k) return p;
else return NULL;
}

void Insert_LinkList(LinkList H,int i, int x)
{ LNode *p,*s;
p=Get_LinkList(H,i-1);
if (p==NULL)
{ printf("插入位置错误~!"); }
else
{ s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=p->next;
p->next=s;

}
}


void Del_LinkList(LinkList H,int i)
{ LinkList p,q;
p=Get_LinkList(H,i-1);
if(p==NULL)
{ printf("第i-1个节点不存在"); }
else
{ if(p->next==NULL)
{ printf("第i个节点不存在"); }
else
{q=p->next;
p->next=q->next;
free(q);
}
}
}


void Print_LinkList(LNode *L)
{ int i;
printf("线性表是:");
for( ;L!=NULL; )
{ printf("%d\t",L->data); L=L->next; }

printf("\n");
}


void main()
{ int j=-1,i;
int x;
LNode *H;
H=Creat_LinkList( );
Print_LinkList(H->next);
while(j)
{ printf(" 请选择你的操作:");
printf("1:插入操作");
printf("2:删除操作");
printf("0:退出");
scanf("%d",&j);
switch(j)
{ case 0 : printf("没有操作,退出"); break;
case 1 : printf("请输入你要插入的数和位置:");
scanf("%d%d",&x,&i);
Insert_LinkList(H,i,x);
Print_LinkList(H->next);
break;
case 2 : printf("请输入你要删除的数的位置:");
scanf("%d",&i);
Del_LinkList(H, i);
Print_LinkList(H->next);
break;
default : printf("选择错误~!");
}
}
}

全部回答

我自己编的一个线性表的插入和删除操作!

我觉得编的还算比较简单!你看看吧!

起码看起来比较简单哈!

#include<stdio.h> #include<malloc.h> typedef struct bocai { int num; struct bocai *next; }stu; int top() { printf("\n---------潇洒菠菜:最最可爱----------\n"); printf("\t1.对链表进行插入操作;\n"); printf("\t2.对链表进行删除操作;\n"); printf("\t3.显示当前链表;\n"); printf("\t4.退出程序;\n"); }

void insertValue(stu *head){ int k=1,i,x; stu *p1,*p2; p1=head->next; printf("\n你要插入的位置:"); scanf("%d",&i); i--; while(p1!=NULL&&k<i) { p1=p1->next; k++; } if(i>k||p1==NULL) { printf("\n插入位置错误\n"); }else{ printf("你要插入的值:"); scanf("%d",&x); p2=(stu *)malloc(sizeof(stu)); p2->num=x; p2->next=NULL; if(i==0) { p2->next=head->next; head->next=p2; }else{ p2->next=p1->next; p1->next=p2; } printf("\n潇洒菠菜提示:插入成功!\n"); display(head); } top(); } void deleteValue(stu *head) { stu *p3; int k=1,i; p3=head->next; printf("\n请输入删除位置:"); scanf("%d",&i); i--; while(p3!=NULL&&k<i) { p3=p3->next; k++; } if(i>k||p3==NULL||p3->next==NULL) { printf("\n删除的位置错误\n"); }else{ if(i==0){ head->next=head->next->next; }else{ p3->next=p3->next->next; } printf("潇洒菠菜提示:删除成功!\n"); } top(); }

int display(stu *head) { stu *p; printf("\n现链表如下:\n"); p=head->next; while(p!=NULL) { printf("%d\n",p->num); p=p->next; } } int main() { char a; stu *p,*head; p=(stu *)malloc(sizeof(stu)); head=(stu *)malloc(sizeof(stu)); p->num=25; p->next=NULL; head->next=p; p=(stu *)malloc(sizeof(stu)); p->num=38; p->next=NULL; head->next->next=p; p=(stu *)malloc(sizeof(stu)); p->num=500; p->next=NULL; head->next->next->next=p; top(); display(head); while(1) { fflush(stdin); printf("\n请输入选项:"); scanf("%c",&a); fflush(stdin); switch(a) { case '1': insertValue(head); break; case '2': deleteValue(head); break; case '3': display(head); break; case '4': printf("\n\t\t潇洒菠菜提示:再会..."); break; default: printf("\n你输入的选项有误!\n"); break; } if(a=='4') break; } scanf("%c",&a); printf("\n"); }

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么我的G币买不到东西呢?我应该在哪买?
真三国无双联合作战怎么转生
贵人时辰是什么意思,中国的时辰是什么意思
半个滩在哪里啊,我有事要去这个地方
单选题下列关于燃料的说法正确的是A.“可燃冰
大话百万礼包我有事种卡了为什么换不了
李白加李白等于?
关于翠青蛇养育
喜欢一个她有5年多了,期间也有想她表白过几
上网时提示身份证被禁用,那我还可以去买火车
Hogwarts是什么意思
什么是五档盘口、非经常性损益、摘星及ST?谢
爱与被爱哪个更幸福?
谁给我个浙江没绑定支付密码的宽带?
已知x1,x2是关于x的方程(x-2)(x-m)=(p-2)(p-m
推荐资讯
悲伤的歌,悲伤的歌词,最伤的.
免费的qq空间
单选题关于明朝的内阁制,下列表述错误的是A.
起诉女儿不养父母的案子,要多久才能判呢
万圣节是什么时间
一茶一坐杨高中路店地址在什么地方,想过去办
北中村地址在什么地方,想过去办事
有谁知道开飞机是怎样的感觉?
最近有没有什么好看的动漫的?
单选题没有错字的一项是。A.孤辟缺陷清规戒律
宠物小精灵剧场版
下曹村地址在什么地方,想过去办事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?