求线性表C语言:创建一个线性表,按输入的值删除(不是按位查找删除)求更正我的错误,下面代码
答案:1 悬赏:10 手机版
解决时间 2021-01-26 13:05
- 提问者网友:相思似海深
- 2021-01-25 13:37
求线性表C语言:创建一个线性表,按输入的值删除(不是按位查找删除)求更正我的错误,下面代码
最佳答案
- 五星知识达人网友:三千妖杀
- 2021-01-25 14:38
#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;
}追问
你又给我制作了另一个错误
#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;
}追问
你又给我制作了另一个错误
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯