c语言returnhead,C语言return true

本文目录一览:

请帮我解决在c语言链表中代码:return head; 有什么作用!

就是你的链表的表头了,链表好比一条绳索,这是绳索的一头,你只有找到这一头才能继续往下面查找其他的,好比顺藤摸瓜。。。。。

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语言链表问题

head-next=NULL; /*头结点next指针置为空*/

tail=head; /*开始时尾结点指向头结点*/

这个是你开始的时候建设的head指针对吧,它的实际内容里面没有数据,只有他的next指向一个NULL,之后你不断添加元素的时候,这个head里面数据始终是空的,所以下面用了这几句话来删除这个空的头节点:

pNewElement=head;

head=head-next; /*修正头指针的位置*/

free(pNewElement); /*释放资源*/

return head;

这几句话的作用也就是把head往后移动一个节点(删除你产生链表时候的头结点),这样的话,返回的链表的头节点的元素就是有学生信息的,希望你看懂了。

c语言程序设计 实现一个链表的插入,删除,输出 结果这个代码输出时老是出错,求帮忙

按照阁下的代码,我又写了一遍

直接就可以用

#includestdio.h

#includestdlib.h

typedef struct listnode

{

int data;

struct listnode *next;

}

linknode,*linklist;

/***************

* 建立链表

***************/

linklist creatlist(int length)

{

int number;

linklist head = (listnode *) malloc(sizeof(listnode));

listnode *p = head;

printf(“请输入链表中的元素:\n”);

for(int i = 0; i length; i++)

{

scanf(“%d”,number);

p-data = number;

p-next = (listnode *) malloc(sizeof(listnode));

p = p-next;

}

return head;

}

/***************

* 插入

***************/

linklist insertlist(linklist head, int pos)

{

int n;

listnode *q = (linklist) malloc(sizeof(linknode));

listnode *p = head;

printf(“\n请输入插入的数值:\t”);

scanf(“%d”,n);

for(int i = 0; i pos-1; i++)

p = p-next;

q-data = n;

q-next = p-next;

p-next = q;

return head;

}

/***************

* 删除

***************/

linklist deletelist(linklist head, int pos)

{

listnode *p = head,*q;

for(int i = 0; i pos-2; i++)

p = p-next;

q = p-next;

p-next = q-next;

free(q);

return head;

}

/***************

* 输出

***************/

void output(linklist head)

{

linklist p = head;

while(p!=NULL)

{

printf(“%d “,p-data);

p = p-next;

}

}

/***************

* 主函数

***************/

int main()

{

linklist head;

int l,a,b;

printf(“请输入链表中元素的个数:\t”);

scanf(“%d”,l);

head=creatlist(l);

printf(“\n输入要插入元素的位置:\t”);

scanf(“%d”,a);

if(a 1 || a l)

printf(“error”);

else

{

insertlist(head, a);

printf(“\n插入后的新链表是:\t”);

output(head);

}

printf(“\n输入要删除元素的位置:\t”);

scanf(“%d”,b);

if(b 1 || a l)

printf(“error”);

else

{

printf(“\n删除后的新链表是:\t”);

deletelist(head,b);

output(head);

}

return 0;

}

刚入c语言 有没有大佬帮我看看这咋写

#includestdio.h

#includestdlib.h

#includeconio.h

/*定义结构体*/

struct student

{

int num;

float score;

struct student *next;

};

/*创建一个只有头结点的空链表*/

struct student *create_head()

{

struct student *head;

head=(struct student*)malloc(sizeof (struct student) );

if(head==NULL) //小心别漏这个

{

printf(“申请头结点失败!\n”);

return NULL;

}

head-next=NULL;

return head;

}

/*将s指向的结点插入链表,使链表保持升序,并返回头结点*/

struct student *insert(struct student *head,struct student *s)

{

struct student *p=head;

while(p-next!=NULLs-scorep-next-score)//特别注意左右不能写反,若s最大,最后p-next=NULL,p-next-score运行出错

p=p-next;

if(p-next==NULL) //s-score最大的情况 //其实两种情况可以并在一块写

{

p-next=s; //连接结点

s-next=NULL; //p-next就等于NULL

}

else

{

p-next=s; //连接结点

s-next=p-next;

}

return head ;

}

/*查找符合条件的结点,并返回指向该结点的指针*/

struct student *search(struct student *head)

{

struct student *p=head-next;

int num;

printf(“请输入要查找学生的学号:\n”);

scanf(“%d”,num);

while(p!=NULLp-num!=num) //特别注意两条件不能写反,若写反最后p指向NULL时p-num找不到 运行出错

p=p-next;

if(p==NULL) //特别注意两个if不能调换,若调换最后p指向NULL时p-num运行出错

{

printf(“找不到符合条件的结点!!!”);

return NULL; //查找不到返回空指针

}

if(p-num==num)

{

printf(“找到符合条件的结点\n该结点为%d\t%f”,p-num,p-score);

return p; //返回查找到的指针

}

}

/*输出链表各结点的值,也称对链表的遍历*/

void print(struct student *head)

{

struct student *p;

printf(” 链表如下: \n”);

p=head-next;

while(p!=NULL)

{

printf(“%d\t%.1f\n”,p-num,p-score);

p=p-next;

}

}

/*释放链表*/

void free_list(struct student *head)

{

struct student *p=head ;

printf(“释放链表:\n”);

while(p!=NULL)

{

head=head-next;

free(p);

p=head;

}

printf(“释放链表成功!\n”);

}

/*删除链表中值为num的结点,并返回链表的首指针*/

struct student *delete_note(struct student *head,int num_x)

{

struct student *p1=head-next , *p2=head ;

while(p1!=NULLp1-num!=num_x) //特别注意左右条件不能调换,若调换如果p1指向NULL时p1-num运行出错

{

p2=p1;

p1=p1-next;

}

if(p1==NULL) //特别注意两个if不能调换,若调换如果p1指向NULL时,p1-num运行出错

printf(“找不到符合删除要求的结点!!!\n”);

if(p1-num==num_x)

{

p2-next=p1-next;

free(p1);

printf(“结点删除成功!\n”);

}

return head;

}

/*完整的有头结点链表操作程序*/

void main()

{

struct student *p , *head ;

char c;

int num ;

float score ;

printf(“有头结点链表操作程序:\n”);

head=create_head();

while(1)

{

printf(“I:插入结点(自动升序) P:输出链表 S:查找结点 D:删除结点 E:释放链表并退出程序! “);

c=getch();

switch(c)

{

case’I’:

printf(“请分别输入要插入学生的学号和分数:\n”);

scanf(“%d%f”,num,score);

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

if(p==NULL)

{

printf(“申请该结点失败!!!\n”);

exit (0) ;

}

p-num=num; p-score=score; //给p赋值

insert(head,p);

printf(“插入成功!\n”);

break;

case’P’:

print(head);

break;

case’S’:

search(head);

break;

case’D’:

printf(“请输入要删除的学生的学号:\n”);

scanf(“%d”,num);

delete_note(head,num);

break;

case’E’:

free_list(head);

exit (0);

}

}

}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/193156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-01 14:59
下一篇 2024-12-01 14:59

相关推荐

  • Python中的while true:全能编程开发必知

    对于全能编程开发工程师而言,掌握Python语言是必不可少的技能之一。而在Python中,while true是一种十分重要的语句结构,本文将从多个方面对Python中的while…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • OpenJudge答案1.6的C语言实现

    本文将从多个方面详细阐述OpenJudge答案1.6在C语言中的实现方法,帮助初学者更好地学习和理解。 一、需求概述 OpenJudge答案1.6的要求是,输入两个整数a和b,输出…

    编程 2025-04-29
  • Python按位运算符和C语言

    本文将从多个方面详细阐述Python按位运算符和C语言的相关内容,并给出相应的代码示例。 一、概述 Python是一种动态的、面向对象的编程语言,其按位运算符是用于按位操作的运算符…

    编程 2025-04-29
  • Python语言由荷兰人为中心的全能编程开发工程师

    Python语言是一种高级语言,很多编程开发工程师都喜欢使用Python语言进行开发。Python语言的创始人是荷兰人Guido van Rossum,他在1989年圣诞节期间开始…

    编程 2025-04-28
  • Python语言设计基础第2版PDF

    Python语言设计基础第2版PDF是一本介绍Python编程语言的经典教材。本篇文章将从多个方面对该教材进行详细的阐述和介绍。 一、基础知识 本教材中介绍了Python编程语言的…

    编程 2025-04-28
  • Python语言实现人名最多数统计

    本文将从几个方面详细介绍Python语言实现人名最多数统计的方法和应用。 一、Python实现人名最多数统计的基础 1、首先,我们需要了解Python语言的一些基础知识,如列表、字…

    编程 2025-04-28
  • Python作为中心语言,在编程中取代C语言的优势和挑战

    Python一直以其简单易懂的语法和高效的编码环境而著名。然而,它最近的发展趋势表明Python的使用范围已经从脚本语言扩展到了从Web应用到机器学习等广泛的开发领域。与此同时,C…

    编程 2025-04-28

发表回复

登录后才能评论