C语言一个动态链表中插入节点的问题

C语言一个动态链表中插入节点的问题,第1张

我也是刚学数据结构,如果回答有问题 ,欢迎Hi我

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

struct labor

{

char number[10]

int salary

struct labor *next

}

struct labor *creat()

{

struct labor *head,*tail,*p

int salary

char number[10]

head=tail=NULL

printf("Please enter the number:")

scanf("%s",number)

printf("Please enter the salary:")

scanf("%d",&salary)

while(salary)

{

p=(struct labor*)malloc(sizeof(struct labor))

strcpy(p->number,number)

p->salary=salary

p->next=NULL

if(head==0)

head=p

else

tail->next=p

tail=p

printf("Please enter the number:")

scanf("%s",number)

printf("Please enter the salary:")

scanf("%d",&salary)

}

return head

}

void list(struct labor *head)

{

struct labor *ptr

if(head==NULL)

{ printf("No list found")return}

for(ptr=headptr!=NULLptr=ptr->next)

{

printf("the number:%s\n",ptr->number)

printf("the salary:%d\n\n",ptr->salary)

}

}

struct labor *insert(struct labor *head)

{

//其实,为了维持和前边数据的一致,这里应该也判断一下薪水是否为0,如果为0则不执行插入 *** 作

struct labor *s,*pp

char number[10]

int salary

s=(struct labor*)malloc(sizeof(struct labor))

printf("Please enter the information:\n")

printf("Please enter the number:")

scanf("%s",number)

printf("Please enter the salary:")

scanf("%d",&salary)//这里少了&,按题意只有这一处错误,下面的是我的建议

strcpy(s->number,number)

s->salary=salary

s->next=NULL

pp=head

while(strcmp(pp->number,"0605")!=0&&pp->next!=NULL)//也不算什么大错误,如果你原来输入的结点中不包含number等于"0605"的结点的话将出现问题,这样修改,如果找不到对应结点,则把新的数据插到链表的尾部

{pp=pp->next}

s->next=pp->next

pp->next=s

return head

}

void main()

{

struct labor *head

head=creat()

list(head)

insert(head)

list(head)

}

如果已知一个节点指针pre和一个节点指针cur,要把cur插入到pre节点之后,很显然要保证链表不会断开而丢失后面的节点,要先把后面的节点指针(指向lat的指针)保存下来,即有cur->next = pre->next,然后把cur连接的一串链表连接到pre后面,即pre->next = cur

上面介绍了,在一个节点之后插入节点的情况。这是通常的情况。如果要向一个链表的头部插入节点,就只需要将新节点的下一个指针指向链表的头指针即可。

在这种情况下,有两点要注意:

1,链表是否为空链表

2,要插入的节点是不是空指针。

代码实现:

//向单链表中插入一个节点(插入在链开始处)

//输入参数:单链表的头指针和要插入的节点指针

//输出参数:无

//返回值:指向单链表的头指针

SingleList* Insert(SingleList *head,SingleList *node)

{

if(node == NULL)

{

return head

}

else if(head == NULL)

{

return node

}

node->next = head

head = node

return head

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11790147.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存