c语言创建节点函数 c语言创建新节点

C语言编写插入节点的函数(悬赏100分)

这个程序有两个主要问题

发展壮大离不开广大客户长期以来的信赖与支持,我们将始终秉承“诚信为本、服务至上”的服务理念,坚持“二合一”的优良服务模式,真诚服务每家企业,认真做好每个细节,不断完善自我,成就企业,实现共赢。行业涉及展览展示等,在成都网站建设营销型网站、WAP手机网站、VI设计、软件开发等项目上具有丰富的设计经验。

1. void insert(list*pHead,list*pNode)因为是按值传递的 pHead值,所以不能改变pHead的值,改为按地址传递,list** pHead

2. insert()中,第一,二种情况时,没有组成循环链表的闭环(没有更新尾节点的next为新的head)。修改后的程序如下:

#includestdio.h //预编译命令

struct list//定义结构体

{

int num;

list* next;

};

list *head,*end; //定义全局变量

list* creat()//创建链表的函数

{

list* p=NULL;

list* q=NULL;

head=NULL;

int num;

scanf("%d",num);

while(num!=0)

{

p=new list; //开辟空间

p-num=num;

if(head==NULL)

head=p;

else

q-next=p;

q=p;

scanf("%d",num);

}

end=q; //将链表的结尾最后一个结点赋给end

end-next=head; //让最后一个结点的的下个结点的地址不为空而指向头指针

return(head);

}

void insert( list** pHead,list* pNode) //插入接点的函数,

{

list *q,*r;

//第一种情况,链表为空

if(*pHead==NULL)

{

*pHead=pNode; //链表头指向pNode

(*pHead)-next = *pHead;//为了循环用

return; //完成插入操作,返回

}

//第二种情况,pNode结点num的值小于dengyu链表头结点num的值

//则将pNode的值插到链表头部

if(pNode-num=(*pHead)-num)

{

//这是为了更新最后一个端点与头节点的连接

list* pos = *pHead;

while (pos-next != *pHead)

{

pos = pos-next;

}

pos-next = pNode;

pNode-next= (*pHead);

*pHead=pNode;

return;

}

//第三种情况,循环查找正确位置

r=*pHead;

q=(*pHead)-next;

while(q!=*pHead)

{

if(pNode-numq-num)

{

r=q;

q=q-next;

}

else

break;

}

//如果插入到最后的位置,则更新pEnd的值

r-next=pNode;

pNode-next=q;

}

list* together(list* p1,list* p2) //定义两个链表合并的函数

{

list *q,*r;

q=p2;

do

{

r=new list; //开辟空间

r-num=q-num; //将q的值赋给r

insert(p1,r); //调用插入结点的函数

q=q-next; //指针向后拨一个接点

}while(q!=p2); //当在最后一个结点时停止循环

return(p1); //返回头指针

}

void main() //主函数

{

list *list1,*list2,*r,*q;

list1=creat(); //调用创建链表的函数

list2=creat(); //调用创建链表的函数

r=together(list1,list2); //调用合并两个链表的函数

q=r-next;

for(;q!=r;q=q-next)

printf("%d ",q-num);

}

C语言创建节点

在这个程序的基础上改下,刚好无聊写了下。关键还是自己去想。#includestdio.h

#includestdlib.h

#includestring.h

#define MAX 50

struct person

{

char name[MAX];

int number;

struct person *next;

};struct person * input()

{

struct person *p,*q,*head;

head = NULL;

char temp[MAX];

puts("In put name:");

while(gets(temp)!=NULL temp[0] != '\0')

{

p = (struct person*)malloc(sizeof(struct person));

if(head == NULL)

head = p;

else

q-next = p;

p-next = NULL;

strcpy(p-name,temp);

puts("number:");

scanf("%d",p-number);

while(getchar()!='\n')

continue;

puts("The next name:");

q = p; }

return head;

}

void out(struct person *head)

{

struct person *p;

if(head == NULL)

puts("Not name in line");

else

{

p = head;

puts("---------------------");

puts("the person with number:");

while(p)

{

{

printf("name is %s the number is %d\n",p-name,p-number);

p=p-next;

}

}

puts("out end");

}

}

void cleanup(struct person *head)

{

struct person *p;

p=head;

while(p!=NULL)

{

free(p);

p=p-next;

}

}

main()

{

struct person *head;

head = input();

out(head);

cleanup(head);

return 0;

}

c语言链表插入一个新节点的函数问题

首先,主函数中,“请输入插入的数据”那里scanf应该是b,这是引发崩溃的原因。

其次,insert函数的目的应该是想插入数据后仍是有序链表。但你的insert函数逻辑太乱,有些不必要的判断,我修正了你的代码,贴给你看看。(虽然你insert是想保证有序,但你在创建的时候没有保证有序,所以最终结果不一定是有序。例如,创建 1,5,2,插入3,最后输出的是 1,3,5,2)

代码修改:

scanf("%d", b);

重写了insert函数,简化逻辑;

动态分配的内存记得释放,增加freeNode释放空间

#include stdio.h

#include stdlib.h

struct link

{

int data;

struct link *next;

};

struct link *add(struct link *head);//创建链表 

void display(struct link *head);//输出数据 

struct link *insert(struct link *head, int b); //插入新节点 

void freeNode(struct link *); //释放空间

int main()

{

char c;

struct link *head = NULL;

printf("要创建一个链表吗?");

scanf(" %c", c);

while (c == 'y' || c == 'Y')

{

head = add(head);

printf("要继续创建节点吗?");

scanf(" %c", c);

}

display(head);

int b;

printf("输入插入的数据");

scanf("%d", b);

head = insert(head, b);

display(head);

freeNode(head);

}

struct link *add(struct link *head)

{

int data;

struct link *p = (struct link*)malloc(sizeof(struct link));

if (head == NULL)

{

head = p;

}

else

{

struct link *pr = head;//一个临时指针pr先保存下head的地址 

while (pr-next != NULL)

{

pr = pr-next;

}

pr-next = p;

}

printf("输入数据");

scanf("%d", p-data);

p-next = NULL;

return head;

}

void display(struct link *head)

{

struct link *pr = head;

while (pr != NULL)

{

printf("%d\n", pr-data);

pr = pr-next;

}

}

struct link *insert(struct link *head, int b)

{

struct link *ptr = head, *prev = head;

struct link *newNode = (struct link *)malloc(sizeof(struct link));

newNode-data = b;

while (ptr  b  ptr-data) {

prev = ptr;

ptr = ptr-next;

}

newNode-next = ptr;

if (ptr == head) head = newNode;

else prev-next = newNode;

return head;

}

void freeNode(struct link *node) {

if (!node) return;

freeNode(node-next);

free(node);

}

本文名称:c语言创建节点函数 c语言创建新节点
网页网址:https://www.cdcxhl.com/article38/ddcoipp.html

成都网站建设公司_创新互联,为您提供微信小程序品牌网站制作营销型网站建设企业建站网站营销网站改版

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

小程序开发