一、创建链表、链表的遍历
将三个学生的信息以链表形式表达
#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;
.................................................