当前位置: 首页 > news >正文

php语言输出九九乘法表_c语言单链表:有头结点和无头结两种列表的区别以及创建和输出的区别...

65891d66643ccafecbf4d4f903206038.png

头指针和头节点的区别:

头指针:

  1. 头指针是指向第一个结点的指针,若链表有头结点,则是指向头结点的指针
  2. 头指针具有标识作用,所以常用的头指针冠以链表的名字(指针变量的名字)
  3. 无论链表是否为空,头指针均不为空
  4. 头指针是链表的必要元素

头结点:

  1. 头结点是为了操作的统一和方便而设立的,放在第一个元素的结点之前,其数据域
  2. 一般无意义(但也可以存放链表的长度)
  3. 有了头结点,对应第一元素结点前插入结点和删除第一结点其操作与其他系欸但那的操作就统一了

带头结点链表图示:

fea807b7efffb78501749bb2313bc9c1.png

#若不头结点,头指针指向a1

空链表图示:

a69bd06888dbea2515dd5bd1e74df03a.png

链表的结点类型定义:

struct student{//定义学生结构类型
	int length;  //用于带头结点存放链表长度(当创建无头结点链表时,可以忽略此数据项)
	int num;//学号
	int score;//分数
	struct student *next;//指针域:指向下一个结点
};

创建无头结点的链表:

struct student *creat_link_table(int n)
{
	int i;
	struct student *head=NULL,*p1,*p2=NULL;//head:头指针,p2:尾指针,初值:NULL;
	for(i=1;i<=n;i++)//建立n个结点的链表
	{
		if((p1=(struct student *)malloc(sizeof(struct student)))==NULL){
			printf("不能分配存储块!n");
			exit(0);
		}
		p1->next=NULL;//令新节点指针域为NULL
	printf("请输入第%d个学生学号及成绩:",i);
	scanf("%d%d",&p1->num,&p1->score);
	if(i==1)
	head=p1;          
	else
	p2->next=p1;//表尾连接心结点
	p2=p1;//p2指向新的表尾结点
	}
	return head;//返回头指针
}
	void main(){
		int n,i;
		struct student *head,*p;
		printf("请输入需要创建链表的长度n:");
		scanf("%d",&n);
		head=creat_link_table(n);    //用head接收返回的头指针
		p=head;              //头指针指向第一个结点(并非头结点),注意以含有头结点链表的区别,对比学习
		for(i=0;p!=NULL;i++){
			printf("第%d个学生的学号和成绩:n");
			printf("姓名   成绩n");
			printf("%d    %dn",p->num,p->score);
			p=p->next;
		}
	}

创建有头节点的单链表并输出:

struct student *creat_link_table(int n){
		int i;
		struct student *head=NULL,*p1,*p2=NULL;    
		//p1为临时指针,主要用来开辟新的空间;p2起过度作用,主要用来使上一个指针与新开辟的空间p1连接起来
		if((head=(struct student *)malloc(sizeof(struct student)))==NULL){
			printf("不能成功分配存储空间!");
			exit(0);
		}
		head->length=0;   //头指针存放链表长度,并初始化为0
		p2=head;        //令p2=头指针,以便p2与开辟的新结点p1连接
		for(i=1;i<=n;i++){     //创建长度为n的链表
			if((p1=(struct student *)malloc(sizeof(struct student)))==NULL){
				printf("不能成功分配空间!");
				exit(0);
			}
			p1->next=NULL;                   //使p1指向空地址
			printf("请输入第%d个学生的学号和成绩:n",i);
			scanf("%d%d",&p1->num,&p1->score);
			p2->next=p1;                    //使p2连接新的结点p1;
			p2=p1;                          //令p2=p1,让指针p2往前移
			head->length++;                 //链表长度加1
		}
		return head;
	}


	void main(){
		int n,i;
		struct student *head,*p;
		printf("请输入需要创建链表的长度n:");
		scanf("%d",&n);
		head=creat_link_table(n);    //用head接收返回的头指针
		p=head->next;                 //头结点不存放数据,所以p应指向头节点的下一个结点
		for(i=0;p!=NULL;i++){
			printf("第%d个学生的学号和成绩:n");
			printf("姓名   成绩n");
			printf("%d    %dn",p->num,p->score);
			p=p->next;
		}
		printf("链表长度为: %dn",head->length);
	}

相关文章:

  • active vue 路由样式保持_网易云音乐接口+vue全家桶开发一款移动端音乐webApp
  • matlab求kcf算法响应图_1周学FFT——第5天 时间抽选奇偶分解基-2 FFT算法
  • xlwt追加写入_python3中关于excel追加写入格式被覆盖问题(实例代码)
  • 地图上的标签为图片_三种方式制作数据地图
  • arcengine 将一个shp的数据读取到另一个shp_从零开始,构建电子地图网站:0_3_数据处理python(1)...
  • python极简主义_极简主义的践行者:一行python有哪些玩法?
  • idea中maven找不到本地仓库jar包_Mac Intellij Maven使用本地仓库的jar包
  • mysql默认安装目录 linux_关于Linux安装mysql默认配置文件位置详解
  • jquery mysql实现加入购物车_jquery-实现加入购物车效果
  • mysql 查询最近7天 时间戳数据_mysql查询今天、昨天、7天、近30天、本月数据
  • 景安mysql主机_景安国内虚拟主机空间如何创建数据库
  • mysql新手问题大全_初学者必读:MySQL数据库常见问题汇总
  • qopenglwidget 拖动窗口时图形消失_CAD画图时鼠标原来是这么用的!
  • mysql root 赋权_mysql 里对root及普通用户赋权及更改密码的一些命令
  • freebsd linux mysql_怎样在linux或unix服务器上安装、使用MySQL
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • js算法-归并排序(merge_sort)
  • JS字符串转数字方法总结
  • oschina
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • vue-router 实现分析
  • webpack入门学习手记(二)
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • Windows Containers 大冒险: 容器网络
  • 不上全站https的网站你们就等着被恶心死吧
  • 搞机器学习要哪些技能
  • 缓存与缓冲
  • 经典排序算法及其 Java 实现
  • 力扣(LeetCode)357
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 我的面试准备过程--容器(更新中)
  • 想写好前端,先练好内功
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 再谈express与koa的对比
  • 湖北分布式智能数据采集方法有哪些?
  • # 安徽锐锋科技IDMS系统简介
  • ###项目技术发展史
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (007)XHTML文档之标题——h1~h6
  • (1)(1.13) SiK无线电高级配置(五)
  • (39)STM32——FLASH闪存
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)SpringBoot3---尚硅谷总结
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET业务框架的构建
  • ?php echo ?,?php echo Hello world!;?
  • @RequestParam详解
  • []常用AT命令解释()