想存入一个链表之后以$结束(使用尾插法),输出当前链表,再删除第i个位置的元素,最后输出最终的链表?

#include<stdlib.h>#include<stdio.h>#defineOK1#defineERROR0typedefintElemType;typedefs... #include <stdlib.h>
#include <stdio.h>
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*Linklist;

//以下是菜单选择函数
int menu_select()
{
int sn;
printf("\n");
printf(" 主菜单\n");
printf("*********************\n");
printf(" 1.单链表的建立\n");
printf(" 2.单链表的结点的删除\n");
printf(" 3.单链表的输出\n");
printf(" 0.退 出 \n");
printf("*********************\n");
printf(" 请选择0---3: ");
for(;;)
{
scanf("%d",&sn);
if(sn<0||sn>3)
printf("\n\t输入错误,重选?0---3: ");
else
break;
}
return sn;
}

//通过键盘输入链表中元素值,利用尾插法建单链表L。
Linklist CreateFromTail()
{
Node *s,*r;
int c;
int flag=1;
Linklist L;
r=L;
while(flag)
{
c=getchar();
if(c!='$'){
s=(Node*)malloc(sizeof(Node));
s->data=c;
r->next=s;
r=s;
}
else{
flag=0;
r->next=NULL;
}
}
}

//在带头结点的单链表L中删除第i个元素。
void DelList(Linklist L,int i)
{
Node *pre,*r;
int k;
pre=L;k=0;
while(pre->next!=NULL&&k<i-1)
{pre=pre->next;
k=k+1;
}
if(!(pre->next))
{
printf("删除i的位置不成立!");
return ;
}
r=pre->next;
pre->next=pre->next->next;
free(r);
return ;
}
//输出链表中的值。
void output(Linklist L)
{Node *p;
p=L;
printf("%d ",*p);
return;
}
//主控菜单处理调试程序。
int main()
{
Linklist L;
int i;
for(;;) {
switch(menu_select())
{
case 1:
printf("\n单链表的建立");
printf("请输入链表中结点的值(如:1,2,3,.....10,$ is end): \n");
L=CreateFromTail();
break;
case 2:
printf("链表结点的删除\n");
printf("请输入被删除结点的序号i:");
scanf("%d",&i);
DelList(L,i);
printf("\n");
printf("\n");
break;
case 3:
printf("输出链表中结点的值: ");
output(L);
printf("\n");
break;
case 0:
printf("再见?\n");
return 0;
}//switch
}
}
编译正确但是无法插入链表,怎么办,求大佬解答。还有一个题目是在这个使用尾插法插入链表的程序中,删除偶数节点,这个又怎么写呢?谢谢解答,救救孩子吧。
展开
 我来答
百好佳
2020-09-22 · TA获得超过301个赞
知道小有建树答主
回答量:702
采纳率:75%
帮助的人:193万
展开全部
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*Linklist;

//以下是菜单选择函数
int menu_select()
{
int sn;
printf("\n");
printf(" 主菜单\n");
printf("*********************\n");
printf(" 1.单链表的建立\n");
printf(" 2.单链表的结点的删除\n");
printf(" 3.单链表的输出\n");
printf(" 0.退 出 \n");
printf("*********************\n");
printf(" 请选择0---3: ");
for(;;)
{
scanf("%d",&sn);
if(sn<0||sn>3)
printf("\n\t输入错误,重选?0---3: ");
else
break;
}
return sn;
}

//通过键盘输入链表中元素值,利用尾插法建单链表L。
Linklist CreateFromTail()
{
Linklist phead = (Linklist)malloc(sizeof(Node));
phead->next = NULL;
phead->data = NULL;
Linklist ptail = phead;
ptail->next = phead;
getchar();
char ch;
int i=0;
while(ch = getchar())
{
if(ch != ',' && ch != '$')
i = i*10+ch-'0';
if(ch == ',' )
{
Linklist pnew = (Linklist)malloc(sizeof(Node));
pnew->data = i;
i = 0;
ptail->next = pnew;
ptail = pnew;
pnew->next = NULL;
}
if(ch == '$')
break;
}
getchar();
return phead;
}

//在带头结点的单链表L中删除第i个元素。
void DelList(Linklist L,int i)
{
Linklist ptail = NULL;

while(L->next->data != i && L->next != NULL)
L = L->next;
if(L->next == NULL)
{
printf("删除i的位置不成立!");
return ;
}
ptail = L->next;
L->next = L->next->next;
free(ptail);
return ;
}
//输出链表中的值。
void output(Linklist L)
{
while(L->next != NULL)
{
L = L->next;
printf("%d ",L->data);

}
return;
}

//释放内存
void free_list(Linklist L)
{
Linklist p;
while(L != NULL)
{
p = L;
L = L->next;
free(p);
}
return;
}

//主控菜单处理调试程序。
int main()
{
Linklist L = NULL;
int i;
for(;;)
{
switch(menu_select())
{
case 1:
printf("\n单链表的建立");
printf("请输入链表中结点的值(如:1,2,3,.....10,$ is end): \n");
L=CreateFromTail();
break;
case 2:
printf("链表结点的删除\n");
printf("请输入被删除结点的序号i:");
scanf("%d",&i);
DelList(L,i);
printf("\n");
printf("\n");
break;
case 3:
printf("输出链表中结点的值: ");
output(L);
printf("\n");
break;
case 0:
printf("再见?\n");
free_list(L);
return 0;
}
}
}
帐号已注销
2020-09-22 · TA获得超过560个赞
知道小有建树答主
回答量:1.6万
采纳率:28%
帮助的人:942万
展开全部
输入一个列表,这个具体你看这个链接的一些介绍吧,多了解一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
数码王子胖
高粉答主

2020-09-22 · 专注于电子产品,数码产品相关类型。
数码王子胖
采纳数:5273 获赞数:16709

向TA提问 私信TA
展开全部
然后保持热情直到结束 以下代码实现的功能是用尾插法建立一个单链表,可以实现插入、删除功能,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chenxiaojian86

2020-09-22 · TA获得超过2497个赞
知道答主
回答量:2.3万
采纳率:36%
帮助的人:1116万
展开全部
存入链表之后,这个的话可以不输入零点再删除是挺好的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式