创建一个链表、删除一个节点、插入一个节点--实验

创建一个链表、删除一个节点、插入一个节点:

(说明:在VC6.0能够正常运行,仅供参考)

#include <stdio.h>
#include <malloc.h>

int n=0;

void print_list(struct student *head);
struct student *creat();
struct student *del(struct student *head,int num);
struct student *insert(struct student *head,struct student *p);

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

int main()
{
	int number;
	struct student *head,stu;
	head = NULL;

	head = creat();
	print_list(head);

	printf("please input the del number:\n");
	scanf("%d",&number);
	head = del(head,number);
	print_list(head);
	
	printf("please input the insert number:\n");
	scanf("%d,%f",&stu.num,&stu.score);
	head = insert(head,&stu);
	print_list(head);

	return 0;
}

/*************创建一个节点********************/
struct student *creat(void)
{
	struct student *head,*tail,*p;
	head = tail = p = NULL;
	tail = p = (struct student *)malloc(sizeof(struct student));
	printf("please input the number:\n");
	scanf("%d,%f",&p->num,&p->score);
	while (p->num != 0)
	{	
		n = n+1;
		if (n == 1)
		{
			head = p;
		}
		else
		{
			tail->next = p;
			tail = p;
		}
		
		p = malloc(sizeof(struct student));
		scanf("%d,%f",&p->num,&p->score);
	}
	tail->next = NULL;
	return (head);
}

/***************删除一个节点*****************/
struct student *del(struct student *head,int num)
{
	struct student *p1,*p2;
	p1 = p2 = NULL;
	p1 = head;
	while (p1->num != 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("del the number:%d\n",num);
	}
	return (head);
}

/************插入一个节点**************/
struct student *insert(struct student *head,struct student *p)
{
	struct student *p0,*p1,*p2;
	p1 = head;
	p0 = p;
	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;
			}
		}
	}

	return (head);
}

void print_list(struct student *head)
{
	struct student *p;
	printf("now,these %d records are:\n",n);
	p = head;
	if (head != NULL)
	{
		do 
		{
			printf("%d,%f\n",p->num,p->score);
			p = p->next;
		} while (p != NULL);
	}
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值