原创

数据结构——用C语言实现链表练习

一、链表实现

例题: 在这里插入图片描述

#include <stdio.h>

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

void main(){
	struct student a,b,c,*head;
	
	a.num =10101;
	a.score=89.5;
	b.num = 10103;
	b.score = 90 ;
	c.num = 10107;
	c.score = 85;

	head = &a;
	a,next = &b;
	b.next = &c;
	c.next = NULL; 
	
	do{
		printf("%1d %5.1f\n",head->num,head->score);
		head = head->next;
	}while(head);
}

二、建立动态链表

2.1 概述

  • 建立动态链表是指在程序执行过程中从无到有地建立起一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相连地关系

2.2 算法思想

  • 约定学号不为0.,如果输入的学号为0,则表示建立链表的过程完成,该结点不应连接到链表中
  • 如果输入的p1->num不等于0,则输入的是第一个结点数据(n = 1),令head = p1,即把p1的值赋给head,也就是使head也指向新开辟的结点p1所指向的新开辟的结点也就成为链表中第一个结点 在这里插入图片描述
  • 再开辟另一个结点并使p1指向它,接着输入该结点的数据,如果输入的p1->num 不等于0,则应链入第2个结点(n = 2 ),将新结点的地址赋给第一个结点的next成员
  • 接着使p2 = p1,也就是使p2指向刚才建立的结点 在这里插入图片描述
  • 再开辟一个结点并使p1指向它,并输入该结点的数据
  • 在第三次循环中,由于n = 3(n不等于1),又将p1的值赋给p2->next,也就是将第3个结点连接到第2个结点之后,并使p2 = p1,使p2指向最后一个结点
  • 再开辟一个新结点,并使p1指向它,输入该结点的数据。由于p1->num的值为0,不再执行循环,此新结点不应被连接到链表中
  • 将null赋给p2->next 在这里插入图片描述

2.3 代码实现

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

#define LEN sizeof(struct student)//student结构的大小

struct student *creat();//创建链表
void print(struct student *head); //打印链表

struct student{
	int numl;
	float score;
	struct student *next;	
};
int n;//全局变量,用来记录存放了多少个数据
void main(){
	struct student *stu;
	
	stu = creat();
	printf( stu );

}

struct student *creat(){
	struct student *head;
	struct student *p1,*p2;
	p1 = p2(struct student *)malloc(LEN);//LEN是student结构的大小
	
	printf("请输入学号:");
	scanf("%d",&p1->num);
	printf("请输入分数:")
	scanf("%d",&p1->score); 

	head = NULL;
	n = 0;
	while(p1->num){
		n++;
		if( 1 == n){
			head = p1;
		}
		else{
			p2->next = p1;
		}
		p2 = p1;
		
		p1=(struct student *)malloc(LEN);
		printf("请输入学号:");
		scanf("%d",&p1->num);
		printf("请输入分数:")
		scanf("%d",&p1->score); 
	}
	p2->next = NULL;
	return head;
}
 void print(struct student *head){
	struct student *p;
	printf("输出结果");
	
	p = head;
	if(head){
		do{
			printf(“学号为%d的成绩是:%f\n”,p->num,p->score);
			p = p->next;
		}while( p );
	}
}

其他
  • 作者:桂大叔 (联系作者)
  • 发表时间:2021-05-26 21:31
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 公众号转载:请在文末添加作者公众号二维码
  • 评论