c++学习之链表

一、创建链表、链表的遍历
将三个学生的信息以链表形式表达

#include <iostream>
using namespace std;
struct student_message //首先定义一个结构体,包含名字、年龄、下一个人的地址
{
	char name[20];//名字创建一个字符数组来表示
	int age;
	student_message *next;/*创建一个节点类型的指针变量,指针指向下一个节点,下一个节点又
	                        包括年龄姓名和下下个节点的地址*/
};
void main()
{
	student_message p3={"Jack",24,NULL};//3、定义第三个学生,这个节点是尾节点,不再指向下一个节点
	student_message p2={"Jerry",25,&p3};//2、定义第二个节点
	student_message p1={"TOM",20,&p2};//1、定义第一个学生的年龄、姓名,指针指向下一个学生的节点地址,使用&
	student_message *head=&p1;//定义头指针,头指针指向第一个节点的地址
	while (head!=NULL) //链表的遍历
	{
		cout<<head->name<<" "<<head->age<<endl;/*1、head指向p1,head->name/age相当于p1.name/age
												2、head指向p2,head->name/age相当于p2.name/age
												3、head指向p3,head->name/age相当于p3.name/age*/
		head=head->next;/*1、head->next就是p1.next,也就是p2,现在head指向p2
						2、head->next就是p2.next,也就是p3,现在head指向p3
						3、head->next此时为NULL,head为NULL,停止循环*/
	}
}

二、链表的查找
如果想要找到Jack的年龄,更改while循环体如下:

while (head!=NULL) 
	{
		if(strcmp(head->name,"Jack")==0)//使用字符串比较函数strcmp(),两个字符串相等输出为0,注意Jack加双引号
		{
			cout<<head->age<<endl;
			break;
		}
		head=head->next;
	}

三、链表的插入和删除
1、链表的插入 分为三个步骤,以A、B、C三个节点为例,要插入D到A、B之间:
1) 定义D节点;
2)定义D节点的next为A节点的next;
3)定义A节点的next为D;
比如在上述程序中插入学生p4,修改代码如下:

void main()
{
	.................
	student_message *head=&p1;//定义头指针,头指针指向第一个节点的地址
	student_message p4={"KAY",21,p1.next};//方式1,定义p4节点,并将p4.next等于p1.next;
	/*strcpy(p4.name,"KAY");方式2,注意字符数组定义要用strcpy()函数
	p4.age=21;
	p4.next=p1.next;*/
	(p1.next)=&p4;//定义p1.next为p4,注意:p1.next为指针,指向一个地址,加取地址符
	..................
}

2、链表的删除 以A、B、C三个节点为例,删除B,那么就将A的next赋给C即可

    ..............................................
	student_message *head=&p1;//定义头指针,头指针指向第一个节点的地址
	p1.next=&p3;
	.................................................
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值