永发信息网

求线性表C语言:创建一个线性表,按输入的值删除(不是按位查找删除)求更正我的错误,下面代码

答案:1  悬赏:10  手机版
解决时间 2021-01-26 13:05
求线性表C语言:创建一个线性表,按输入的值删除(不是按位查找删除)求更正我的错误,下面代码
最佳答案
#include
#include
#include

struct node  //定义结构体 
{
int ch;  //存放数据
struct node* next;  //指向下一个结点 
};

struct node* Create()   //新建结点并初始化 
{
struct node* n=(struct node*)malloc(sizeof(struct node));
n->ch=0; 
n->next=NULL;
return n;
}

int main()
{
struct node *head=NULL,*p=NULL;
int n;
printf("
请输入数据, 要结束, 请输入-1
");
while(1)
{
scanf("%d",&n);
if(n==-1) break;                 //如果输入的是-1则表示用户结束输入 
struct node *new_node;
new_node=Create();                 //新建结点 
new_node->ch=n;                    //把用户输入的数据存储入新结点中 
if(head==NULL)                     //如果头结点为空,则把当前新结点当成头结点 
{
head=new_node;
p=head;                        //当前指向为头结点 
}
else                               //如果头结点不为空 
{
p->next=new_node;              //把上一个结点的next指向新建结点 
p=p->next;                     //当前指向为新结点 
}
}
//下面是输出全部数据 
p=head;                                //重新指向头结点,以便输出 
while(1)
{
printf("%5d",p->ch);               //输出数据字符串 
if(p->next==NULL) break;           //如果当前结点没有指向下一个结点,则退出 
p=p->next;                         //当前指向下一个结点 
}
//下面是查寻数据
p=head;
struct node* prev=p;                   //记录上一个结点的指针 
printf("
请输入要删除的数据: ");
scanf("%d",&n);
bool find=false;                       //是否已找到该数据 
while(1)
{
if(p->ch==n)
{
printf("
找到:%d",p->ch);
if(p==head)                    //如果是头结点 
{
head=p->next;              //重新设置头结点
free(p);                   //释放该结点内存 
find=true;
break;
}
else if(p->next==NULL)         //如果是尾结点
{
free(p);                   //释放该结点内存 
prev->next=NULL;           //把尾结点掐掉
find=true;
break; 
}
else
{
prev->next=p->next;        //去掉本结点
free(p);                   //释放该结点内存 
find=true;
break; 
}
}
else if(p->next==NULL)
{
find=false;
break;
}
prev=p;
p=p->next;
}
if(find==false)
{
printf("
未找到该数据
");
}
else
{
printf("
已删除该数据
");
}
p=head;                                //重新指向头结点,以便输出 
while(1)
{
printf("%5d",p->ch);               //输出数据字符串 
if(p->next==NULL) break;           //如果当前结点没有指向下一个结点,则退出 
p=p->next;                         //当前指向下一个结点 
}
return 0;
}追问
你又给我制作了另一个错误
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
英雄联盟护盾加成会格挡引燃的真实伤害吗?
用鹏程万里,辉煌腾达开头怎么做对联
瓷器餐具能否加热
1.学校安排宿舍,如果按照7人一间安排要比8人
马上要去日本东京了,在东京什么地方能找到中
锦鲤鱼缸用白石英石砂铺底,酸碱如何?
单反相机拍的照片拷到电脑上,是用数据线 好
艺织舞舞蹈培训基地地址在什么地方,想过去办
三和布艺(长青路)地址在什么地方,我要处理点
临沂公交驾校怎么去啊,我要去那办事
移动动感地带卡好吗?
有没有功夫派类似的网页游戏
[image]40 耐克鞋侧标破了
律师没有立案我该怎么办
水瓶座的守护星座是什么
推荐资讯
听海KTV地址有知道的么?有点事想过去
电压一般指两点之间的电位差.通常指电路中某
【形容心情不好的句子】形容心情不好的句子
短暂性脑缺血发作(TIA)的常见病因为A.脑血管
外贸出口产品包装袋重量标识为kg还是kgs
在没有斑马线的情况下 行人过马路被机动车撞
有两个数,第一个数的2倍比第二个数大5,第一个
上海市地铁11号线会延伸到浦东机场吗?
你们见过读书读傻的人吗
有哪些好书推荐的网站
55寸2k平板电视是6核好还是十核哪个好
女孩脸上起痘痘怎么办
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?