单链表(带头结点)实现头插法、按结点位序搜索、插入值——基于王道数据结构算法书

本文介绍了如何使用C语言实现带头结点的单链表,包括typedef的解读、头插法建立链表、按结点位序搜索和插入值。通过代码解析和示例,讨论了GetElem函数的修正、链表初始化、时间复杂度等关键点,并提供了运行截图和总结。
摘要由CSDN通过智能技术生成

关于typedef的解读:

  1. typedef是在计算机编程语言中用来为复杂的声明定义简单的别名,它与宏定义有些差异。它本身是一种存储类的关键字,与auto、static、register等关键字不能出现在同一个表达式中。
  2. 通常讲,typedef要比#define要好,特别是在有指针的场合。
  3. 使用模板:typedef <数据类型> <别名>
  • 当你把int函数重命名后:
typedef int 整数;
typedef int *整数指针;

当你书写如下代码:

int x =1;
int *p;

代码等价于:

整数 x = 1;
整数指针 p;
  • 增强代码可读性,强调返回的值的意义
typedef struct LNode {
   
	int data;
	struct LNode *next;
}LNode,*LinkList;

这段代码相当于如下操作:首先定义一个struct LNode的数据类型;再把struct LNode重命名为LNode;再定义一个LinkList作为指向struct LNode的指针。用上述写法是非常简便的。

另外,写LNode * 时,强调的是返回一个结点;LinkList则是强调返回的是一个单链表。实质上两者是等价的。为什么会有区别?因为LinkList L 相当于创建一个头指针L,而根据单链表的特性,你只要定义并找到第一个结点L,实际上剩下的所有指针都可以找到,也就是整个链表可以找到。

源码

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

typedef struct LNode {
   
	int data;//数据域
	struct LNode* next;//指针域
}LNode, *LinkList;

//头插法建立单链表
LinkList List_HeadInsert(LinkList &L) {
   
	LNode* s; 
	int i;
	L = (LNode *)malloc(sizeof(LNode));//创建头结点
	L->next = NULL;   //头结点的指针域设置为null
	L->data = NULL;   //头结点不存储数据
	printf("请输入你要存储的数据,999为退出输入:\n");
	scanf_s("%d", &i);
	while (i != 999)
	{
   
		s = (LNode*)malloc(sizeof(LNode));
		s->data = i;
		s->next = L->next; //实质就是s的后继指针域置为NULL,之所以写L->next是为了实现头插循环
		L->next = s;
		scanf_s("%d", &i);
	}
	return L;
}

//判空
bool Empty(LinkList L) {
   
	if (L->next == NULL){
   
		printf("表空.\n");
		printf("=======================\n"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值