10.C++之链表

11 篇文章 0 订阅

C++之链表

一、链表简介

链表是一种物理存储单元上下不连续的存储结构,数据元素之间是通过链表中的指针进行链接。链表是由一系列的节点(链表中每一个元素称为节点)组成,节点可以在运行时动态生成。

每一个节点都包含两个部分:一个是存储数据的数据域,另一个是存储下一个节点地址的指针域。

一般链表在一些需要快速插入/删除,而不太关心或者不需要随机访问的情况下使用。

链表相对于数组:链表允许在任意位置插入或删除节点,但是链表不支持随机访问节点,只能从头节点逐个访问(遍历)每一个节点。

链表分为三种:单向链表、双向链表以及循环链表。

单向链表:包含两个域:一个数据域和一个指针域,它可以向一个方向遍历;
双向链表:每个节点中有数据域和指针域,前面的指针指向前一个节点,后一个指针指向下一个节点;
循环链表:首节点和末节点被连在一起,它可以被视为“无头无尾”。这种链表比较有利于数据存储缓存。

二.链表使用范例

/*********************************链表使用范例****************************************/
#include <iostream>
using namespace std;

//用结构体类型表示一个节点

typedef struct node
{
	char name[20];
	int age;
	struct  node *next;
}Student;

//创建链表
Student *createList(int n)
{
	Student *head = new Student;//头节点 一般不存储数据
	Student *pre = head;
	for (int i = 0; i < n; i++)
	{
		Student *p = new Student;
		printf("请输入第%d个学生的姓名和年龄:", i + 1);
		cin >> p -> name;
		cin >> p->age;

		pre->next = p;
		pre= p;
		p->next = NULL;
	}
	return head;
}

void display(Student *head)
{
	Student *p = head->next;
	while (p != NULL)
	{
		cout << p->name << "," << p->age << endl;
		p = p->next;
	}
}

int main()
{
	int n = 5;
	Student *head = createList(n);
	display(head);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值