数据结构(2)—单链表(带头结点和不带头结点)

一、定义说明:

        单链表是通过一组任意的存储单元来存储线性表中的数据元素。每个结点都有data数据域(用来存放数据元素)和next指针域(用来存放后继节点的地址)。

        对于顺序表,单链表可以解决顺序表需要一整个大量的连续的存储单元的缺点,单链表的元素可以离散地分布在存储空间中,即非随机存取的存储结构,不能直接找到表中某个特定的结点,当查找某个特定的结点时,需要从表头开始一个一个遍历。因为单链表附加了指针域,缺点就是存储空间增大。

        单链表有带头结点和不带头结点两种类型。引入头结点的好处:①便于第一个结点的处理:增加头结点后,第一个结点的地址保存在头结点的指针域中,则对链表的第一个元素的操作和其他元素相同,无需进行特殊处理。(若单链表不带头结点,则第一个结点无前驱结点,在其前插入结点和删除该结点操作复杂些。)②便于空表和非空表的统一处理:增加头结点后,无论链表是否为空,头指针都是指向头结点的非空指针。

二、带头结点的程序说明

2.1 单链表的存储结构

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

2.2 初始化

bool Initlist(LinkList &L)
{
	//L = (LinkList)malloc(sizeof(LNode)); //c语言定义头结点
	L = new LNode; //定义头结点
	L->next = NULL; //尾指针为空,头结点指向空
	return true;
}

2.3 头插法建立单链表

void List_HeadInsert(LinkList& L)
{
	int n;  //输入元素的个数
	cout << "头插法--请输入元素个数n:" << endl;
	cin >> n;
	LinkList s;  //定义指针变量s
	cout << "请依次输入元素:" << endl;
	while (n--)
	{
		s = new LNode; //定义变量结点
		cin >> s->data;
		s->next = L->next;
		L->next = s;
	}
}

2.4 尾插法建立单链表

void List_TailInsert(LinkList& L)
{
	int n; //输入元素的个数
	cout << "尾插法--请输入元素个数n:" << endl;
	cin >> n;
	LinkList r; //定义一个表尾指针
	r = L;
	LinkList s;//定义指针变量s
	cout << "请依次输入元素:" << endl;
	while (n--) 
	{
		s = new LNode;
		cin >> s->data;
		s -> next = NULL;
		r->next = s;
		r = s;
	}
}

2.5 打印链表

void Print_list(LinkList& L)
{
	LinkList s;
	s = L->next;
	while(s)
	{
		cout << s->data << " ";
		s = s->next;
	}
	cout << endl;
}

2.6 求链表的长度

int Length_list(LinkLi
  • 12
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值