编写实现单链表的各种基本运算,并在此基础上设计一个主函数完成如下功能:

这篇笔记详细记录了单链表的基本操作,包括初始化、尾插法插入元素、输出链表、计算长度、判断空链表、访问指定位置元素、插入与删除元素等。通过实践这些操作,作者体会到理解代码的重要性,尤其是在数据结构的学习中,深入理解每个步骤有助于提高编程能力。

##单链表基本运算的笔记(可供一些初学者学习)
(1)初始化单链表L。
(2)依次采用尾插法插入h、e、l、l、o。
(3)输出单链表L。
(4)输出单链表L的长度。
(5)判断单链表L是否为空。
(6)输出单链表L的第2个和第4个元素。
(7)输出元素o位置。
(8)在单链表L的第4个位置上插入元素r。
(9)输出单链表L。
(10)删除单链表L的第3个元素。
(11)输出单链表L。
(12)释放单链表L。

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

typedef char ElemType;                                     /*相当于typedef给char换个名字Elemtype,便于之后修改,
                                                          比如你要把所有char改成int,只需要改这一个地方。*/
typedef struct LNode                                      //同理,定义结点,结点可以换一个长方形,切成两半,左边是数据域,右边是指针域
{
   
   
	ElemType data;                                            //相当于char data,定义数据域
	struct LNode *next;                                       //定义指针域
}LinkList;                                                //结构体变量,比如后面的LinkList *&L可以跟int x对比一下就理解了

void InitList(LinkList *&L)                               /*初始化操作:就是创建一个头结点,头结点没有data,有next,
                                                           所以头结点不为空可以与链表为不为空作区分,链表只有头结点的话,就是为空。
                                                           另外,括号里的形参有的是*&L,有的是*L,可简单记为有增减操作用*&L*/
{
   
   
	L = (LinkList *)malloc(sizeof(LinkList));                 /*malloc(size):用来申请一块动态内存,参数size是要申请的内存的大小,
	                                                          (LinkList *):把它转换成LinkList类型的指针,这里的类型就是前面L的类型。*/       
	L->next = NULL;                                           //L指向空。  这里的“=”可以翻译成“指向”,会容易理解。
}

int InsertList(LinkList *&L,int i,ElemType e)             //(尾插法)插入操作:在第i个位置插入元素e。  括号里的形参i,e都是手动输入的
{
   
   
	int j = 0;
	LinkList *p = L, *s;                                      //定义一个结构体变量 p,让它等于头结点,再定义一个结构体变量 s
	
	while((j < i - 1) && (p != NULL))                         /*这个while是这篇代码的重点,基本很多操作都需要用到,不过很简单。
	                                                          遍历:你输入想要找的位置i,当j < i - 1并且头结点不为空,那么就往后移动一个位置,
	                                                          直到位置i。一开始 p 等于头结点,最后 p 会跑到第 i 个位置。*/
	{
   
   
		j++;
		p = p->next;
	}
	
	if(p == NULL)                                             //若头结点为空,则返回0。
	{
   
   
		return 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值