C++ 链表基础知识

一:基本概念

  • 数组的不足
    1.大小必须在定义时确定
    2.占用连续空间,导致小空间无法充分利用
    3.在插入/删除元素时必须前后移动元素
  • 结点:存放数据的基本单位
    1.数据域:存放数据的值
    2.指针域:存放下一个同类型结点的地址

链表与数组的比较:在这里插入图片描述

  • 链表:由若干结点构成的链式结构
  • 表头结点:第一个结点
  • 表尾结点:链表的最后一个结点,指针域为空
  • 头指针:指向链表表头节点的指针

二:链表的建立、输出和释放

1.建立链表

struct student {
	string name;
	int num;
	char sex;
	struct student* next;  //指向结构体的指针(下一个结点)
};
    student* head = NULL, * p = NULL, * q = NULL;
	int i;
	/*链表的建立*/
	for (i = 0; i < 5; i++)
	{
		if (i > 0)
			q = p;

		p = new(nothrow) student;
		if (p == NULL)
			return -1;

		if (i == 0)
			head = p;
		else
			q->next = p;

		cout << "请输入第" << i + 1 << "个人的基本信息" << endl;
		cin >> p->name >> p->num >> p->sex;
		p->next = NULL;
	}

2.输出链表

/*链表的输出*/
	p = head;  //p复位
	while (p != NULL)
	{
		cout << p->name << " " << p->num << " " << p->sex << endl;
		p = p->next;
	}

3.释放链表

/*链表的释放*/
	p = head;  //p复位
	while (p)
	{
		q = p->next;
		delete p;
		p = q;
	}

三:结点的删除与插入

1.删除

/*结点的删除*/
    p->next = t->next;
    delete[]t;

2.插入

/*结点的插入*/
    student *np = new(nothrow) student;
    if (np == NULL)
        return -1;
    //输入新节点信息(略)
    student *t = head->next;
    head->next = np;
    np->next = t;
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值