⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linklist.txt

📁 这是我用VC编写的一些数据结构程序
💻 TXT
字号:
/*2005-03-02  -----------------------------------------------------------  
  题目要求:
    用单链表实现如下内容:建立有多个学生的成绩档案(以学号为0为结束标志),
    每个学生包括学号、成绩,并实现新成员的加如和旧成员的删除。
--------------------------------------------------------------------------*/

#include<stdio.h>
#include<stdlib.h>


typedef struct student     //单链表的存储结构
{
	long num;
	float score;
	struct student* next;
}LINK;

int n;   //定义一个全局变量(链表的结点个数)

LINK* Create()		 //建立
{
	LINK* head;
	LINK* p1,*p2;
	n=0;
	p1=p2=(LINK*)malloc(sizeof(LINK)); 
	scanf("%ld,%f",&p1->num,&p1->score);
	head=NULL;
	while(p1->num !=0)
	{
		n=n+1;
		if(n==1)
			head=p1;
		else                  //p1指向新开的结点,p2指向链表中的最后一个结点
			p2->next=p1;      //把p1所指的结点连在p2所指结点的后面
		p2=p1;				  //p2指向链表中的最后一个结点		
		p1=(LINK*)malloc(sizeof(LINK));
		scanf("%ld,%f",&p1->num,&p1->score);
	}
	p2->next=NULL;

	return head;
}


LINK* Insert(LINK *head,LINK *stud) //插入
{
	LINK *p0,*p1,*p2;
	p1=head;   //p1指向第一个结点
	p0=stud;   //p0指向待插入的结点
	if(head==NULL)
	{
		head=p0; 
		p0->next=NULL;
	}
	else
	{
		while((p0->num > p1->num) && (p1->next !=NULL))
		{
			p2=p1;  //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;
}


LINK* Delete(LINK*head,long num)   //删除
{
	LINK *p1,*p2;
	if(head==NULL)
	{
		printf("链表为空!\n\n");
		return(head);
	}
	p1=head; // p1指向第一个结点
	while(num !=p1->num && p1->next !=NULL)  //如果要删除的不是第一个接点,
	{
		p2=p1;        //将p1赋给p2,使p2指向刚才检查过的结点
		p1=p1->next;  //p1指向下一个结点
	}
	if(num==p1->num)  //如果删除的是第一个结点
	{
		if(p1==head)
			head=p1->next;  //head指向原来的第2个结点
		else
			p2->next=p1->next;
		
		printf("删除了:%ld",num);
		n=n-1;
	}
	else
		printf("没有找到%ld",num);

	return(head);
}

void print(LINK *head)                //输出
{
	LINK* p;
	printf("现在链表中的%d个记录是:\n",n);
	p=head;
	if(head !=NULL)
		do
		{
			printf("%ld %5.1f\n",p->num,p->score);
			p=p->next;
		}while(p!=NULL);
}

void main()
{
	printf("\n---------------------单链表的操作--------------------------\n\n");
	LINK *head,*stu;
	long Delete_num;
	printf("请输入记录(学号,成绩),输入学号为0则结束:\n");

	head=Create();                        //建立操作
	print(head);

	printf("请输入要插入的记录:\n");      //插入操作
	stu=(LINK*)malloc(sizeof(LINK));
	scanf("%ld,%f",&stu->num,&stu->score);
	while(stu->num !=0)
	{
		head=Insert(head,stu);
		print(head);		
		printf("请输入要插入的记录:\n");
		stu=(LINK*)malloc(sizeof(LINK));
		scanf("%ld,%f",&stu->num,&stu->score);
	}
	

	printf("请输入要删除的数据:\n");      //删除操作
	scanf("%ld",&Delete_num);
	while(Delete_num !=0)
	{
		head=Delete(head,Delete_num);
		print(head);
		printf("请输入要删除的数据:\n");
		scanf("%ld",&Delete_num);
	}
}

		
		
		
		
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -