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

2024年12月01日 09:52
有1个网友回答
网友(1):

#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("\n请输入数据, 要结束, 请输入-1\n");
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("\n请输入要删除的数据: ");
scanf("%d",&n);
bool find=false;                       //是否已找到该数据 
while(1)
{
if(p->ch==n)
{
printf("\n找到:%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("\n未找到该数据\n");
}
else
{
printf("\n已删除该数据\n");
}
p=head;                                //重新指向头结点,以便输出 
while(1)
{
printf("%5d",p->ch);               //输出数据字符串 
if(p->next==NULL) break;           //如果当前结点没有指向下一个结点,则退出 
p=p->next;                         //当前指向下一个结点 
}
return 0;
}