C语言单链表的删除指定元素操作。
#include<stdio.h>#include<stdlib.h>typedefintElemType;typedefvoidStatus;typedefstruct...
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef void Status;
typedef struct Node
{
ElemType data;
struct Node *next;
}LNode, *LinkList;
Status CreatList(int ,LinkList );
Status Traverse(LinkList );
Status FreeList(LinkList );
ElemType DelElem(LinkList ,ElemType ,ElemType );
int main()
{
int Length;
ElemType e;
LinkList L;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
printf("Input the Length of List:\n");
scanf("%d",&Length);
CreatList(Length,L);
printf("Travers the List :\n");
Traverse(L);
DelElem(L,3,e);
Traverse(L);
FreeList(L);
printf("List release Success!\n");
system("PAUSE");
return 0;
}
Status CreatList(int Length,LinkList L)
{
int i;
LinkList Body;
for (i=0;i<Length;i++)
{
Body=(LinkList)malloc(sizeof(LNode));
L->next=Body;
printf("Input the %dth num:\n",i+1);
scanf("%d",&(Body->data));
L=Body;
}
Body->next=NULL;
}
Status FreeList(LinkList L)
{
LinkList temp;
while (L->next!=NULL)
{
temp=L->next;
free(L);
L=temp;
}
free(L);
}
Status Traverse(LinkList L)
{
while (L->next!=NULL)
{
printf("%d ",L->next->data);
L=L->next;
}
printf("\n");
}
ElemType DelElem(LinkList L,ElemType elem,ElemType e)
{
LinkList p,q;
p=L;
q=p->next;
while(q!=NULL)
{
if((q->data)==elem)
{
e=elem;
p->next=q->next;
free(q);
return e;
}
else
{
p=p->next;
q=p;
}
}
}
我这个DelElem函数哪里写的不对,执行完删除指定元素的操作之后就出乱码了。。。求大神帮忙改改 展开
#include <stdlib.h>
typedef int ElemType;
typedef void Status;
typedef struct Node
{
ElemType data;
struct Node *next;
}LNode, *LinkList;
Status CreatList(int ,LinkList );
Status Traverse(LinkList );
Status FreeList(LinkList );
ElemType DelElem(LinkList ,ElemType ,ElemType );
int main()
{
int Length;
ElemType e;
LinkList L;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
printf("Input the Length of List:\n");
scanf("%d",&Length);
CreatList(Length,L);
printf("Travers the List :\n");
Traverse(L);
DelElem(L,3,e);
Traverse(L);
FreeList(L);
printf("List release Success!\n");
system("PAUSE");
return 0;
}
Status CreatList(int Length,LinkList L)
{
int i;
LinkList Body;
for (i=0;i<Length;i++)
{
Body=(LinkList)malloc(sizeof(LNode));
L->next=Body;
printf("Input the %dth num:\n",i+1);
scanf("%d",&(Body->data));
L=Body;
}
Body->next=NULL;
}
Status FreeList(LinkList L)
{
LinkList temp;
while (L->next!=NULL)
{
temp=L->next;
free(L);
L=temp;
}
free(L);
}
Status Traverse(LinkList L)
{
while (L->next!=NULL)
{
printf("%d ",L->next->data);
L=L->next;
}
printf("\n");
}
ElemType DelElem(LinkList L,ElemType elem,ElemType e)
{
LinkList p,q;
p=L;
q=p->next;
while(q!=NULL)
{
if((q->data)==elem)
{
e=elem;
p->next=q->next;
free(q);
return e;
}
else
{
p=p->next;
q=p;
}
}
}
我这个DelElem函数哪里写的不对,执行完删除指定元素的操作之后就出乱码了。。。求大神帮忙改改 展开
3个回答
推荐于2017-09-24
展开全部
你的DeleteElem我有些看不懂
根据你想要的功能,给改了一下--
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef void Status;
typedef struct Node
{
ElemType data;
struct Node *next;
}LNode, *LinkList;
Status CreatList(int ,LinkList );
Status Traverse(LinkList );
Status FreeList(LinkList );
ElemType DelElem(LinkList ,ElemType );
int main()
{
int Length;
ElemType e;
LinkList L;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
printf("Input the Length of List:\n");
scanf("%d",&Length);
CreatList(Length,L);
printf("Travers the List :\n");
Traverse(L);
while(1)
{
printf("请输入要删除的元素:\n");
scanf("%d",&e);
if(DelElem(L,e))//在L中将元素e删除
{printf("删除%d后:\n",e);break;}
printf("未找到该元素,删除失败\n");
}
Traverse(L);
FreeList(L);
printf("List release Success!\n");
//system("PAUSE");return 0已经使程序暂停了
return 0;
}
Status CreatList(int Length,LinkList L)
{
int i;
LinkList Body=NULL,p=L;
for (i=0;i<Length;i++)
{
Body=(LinkList)malloc(sizeof(LNode));
p->next=Body;
printf("Input the %dth num:\n",i+1);
scanf("%d",&(Body->data));
p=Body;
}
Body->next=NULL;
}
Status FreeList(LinkList L)
{
LinkList temp=NULL,p=L;
while (p)
{
temp=p->next;
free(p);
p=temp;
}
}
Status Traverse(LinkList L)
{
LinkList p=L;
p=p->next;
while(p)//while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
ElemType DelElem(LinkList L,ElemType e)
{
LinkList p,q;
q=p=L;
p=p->next;//p指向头结点后第一个元素
while(p)
{
if(p->data==e)
{
q->next=p->next;
free(p);
return 1;
}
else{
q=p;//q始终指向p上一个结点
p=p->next;
}
}
//没有执行上个return,说明没找到
return 0;
}
根据你想要的功能,给改了一下--
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef void Status;
typedef struct Node
{
ElemType data;
struct Node *next;
}LNode, *LinkList;
Status CreatList(int ,LinkList );
Status Traverse(LinkList );
Status FreeList(LinkList );
ElemType DelElem(LinkList ,ElemType );
int main()
{
int Length;
ElemType e;
LinkList L;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
printf("Input the Length of List:\n");
scanf("%d",&Length);
CreatList(Length,L);
printf("Travers the List :\n");
Traverse(L);
while(1)
{
printf("请输入要删除的元素:\n");
scanf("%d",&e);
if(DelElem(L,e))//在L中将元素e删除
{printf("删除%d后:\n",e);break;}
printf("未找到该元素,删除失败\n");
}
Traverse(L);
FreeList(L);
printf("List release Success!\n");
//system("PAUSE");return 0已经使程序暂停了
return 0;
}
Status CreatList(int Length,LinkList L)
{
int i;
LinkList Body=NULL,p=L;
for (i=0;i<Length;i++)
{
Body=(LinkList)malloc(sizeof(LNode));
p->next=Body;
printf("Input the %dth num:\n",i+1);
scanf("%d",&(Body->data));
p=Body;
}
Body->next=NULL;
}
Status FreeList(LinkList L)
{
LinkList temp=NULL,p=L;
while (p)
{
temp=p->next;
free(p);
p=temp;
}
}
Status Traverse(LinkList L)
{
LinkList p=L;
p=p->next;
while(p)//while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
ElemType DelElem(LinkList L,ElemType e)
{
LinkList p,q;
q=p=L;
p=p->next;//p指向头结点后第一个元素
while(p)
{
if(p->data==e)
{
q->next=p->next;
free(p);
return 1;
}
else{
q=p;//q始终指向p上一个结点
p=p->next;
}
}
//没有执行上个return,说明没找到
return 0;
}
展开全部
DelElem函数里
else
{
p=p->next;
q=p->next;
}
如果是你那样q=p;q与p指向同一个地址怎么会对呢?
希望你采纳。
else
{
p=p->next;
q=p->next;
}
如果是你那样q=p;q与p指向同一个地址怎么会对呢?
希望你采纳。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序写的不错,正如楼上所言,改成q=p->next 或者 q=q->next,后者也许更容易看懂
呵呵
呵呵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询