吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 907|回复: 1
收起左侧

[讨论] 初学C语言之初级链表的实现

[复制链接]
zhaoqingdz 发表于 2022-8-7 21:58
不多说了,直接上代码:
[C] 纯文本查看 复制代码
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct student)

struct student
{
	long num;
	float score;
	struct student *next;
};

int n;

int main()
{
	struct student* creat();
	struct student*del(struct student *, long);
	struct student*insert(struct student*, struct student*);
	void print(struct student*);
	struct student*head, *stu;
	long del_num;
	printf("input records:\n");
	head = creat();
	print(head);
	printf("\ninput the deleted number:");
	scanf("%ld", &del_num);
	while (del_num != 0)
	{
		head = del(head, del_num);
		print(head);
		printf("input the deleted number:");
	    scanf("%ld", &del_num);
	}
	printf("\ninput the inserted record:");
	stu = (struct student*)malloc(LEN);
	scanf("%ld,%f", &stu->num, &stu->score);
	while (stu->num != 0)
	{
		head = insert(head, stu);
		print(head);
		printf("input the inserted record:");
		stu = (struct student*)malloc(LEN);
		scanf("%ld,%f", &stu->num, &stu->score);
	}
	return 0;
}

//定义建立链表的creat函数
struct student*creat()
{
	struct student*head;
	struct student*p1, *p2;
	n = 0;
	p1 = p2 = (struct student*)malloc(LEN);
	scanf("%ld,%f", &p1->num, &p1->score);
	head = NULL;
	while (p1->num != 0)
	{
		n = n + 1;
		if (n == 1)
			head = p1;
		else
			p2->next = p1;
		p2 = p1;
		p1 = (struct student*)malloc(LEN);
		scanf("%ld,%f", &p1->num, &p1->score);
	}
	p2->next = NULL;
	return(head);
}

//定义删除结点的del函数
struct student*del(struct student*head, long num)
{
	struct student*p1, *p2;
	if (head == NULL)
	{
		printf("\nlist null! \n");
		return (head);
	}
	p1 = head;
	while (num != p1->num&&p1->next != NULL)
	{
		p2 = p1;
		p1 = p1->next;
	}
	if (num == p1->num)
	{
		if (p1 == head)
			head = p1->next;
		else
			p2->next = p1->next;
		printf("delete:%ld\n", num);
		n = n - 1;
	}
	else
		printf("%ld not been found!\n", num);
	return(head);
}

//定义插入结点的insert的函数
struct student*insert(struct student*head, struct student*stud)
{
	struct student*p0, *p1, *p2;
	p1 = head;
	p0 = stud;
	if (head == NULL)
	{
		head = p0; 
		p0->next = NULL;
	}
	else
	{
		while ((p0->num > p1->num) && (p1->next != NULL))
		{
			p2 = p1;
			p1 = p1->next;
		}
		if (p0->num <= p1->num)
		{
			if (head == p1)
				head = p0;
			else
				p2->next = p0;
			p0->next = p1;
		}
		else
		{
			p1->next = p0;
			p0->next = NULL;
		}
	}
	n = n + 1;
	return (head);
}

//定义输出链表的print函数
void print(struct student*head)
{
	struct student*p;
	printf("\nNow,These %d records are:\n", n);
	p = head;
	if (head!=NULL)
	do
	{
		printf("%ld %5.1f\n", p->num, p->score);
		p = p->next;
	} while (p != NULL);
}

免费评分

参与人数 5吾爱币 +5 热心值 +5 收起 理由
TJSCer + 1 + 1 用心讨论,共获提升!
叶樱枫 + 1 + 1 用心讨论,共获提升!
ada1688 + 1 + 1 我很赞同!
xmt_Gcc + 1 + 1 我很赞同!
HUAJIEN + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

luoye1997 发表于 2022-8-8 11:31
感谢大佬啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 09:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表