链表是一种物理存储单元上不连续的存储结构,数组元素之间通过链表中的指针进行链接。链表是由一系列的结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。
每个结点包含两部分,一个是存储数据的数据域,另一个是存储下一结点地址的指针域。
链表允许在任意位置插入或删除结点,但是不支持随机访问结点,只能从头结点逐个访问每个结点。一般在一些需要快速插入或删除,而不太关心或者不需要随机访问的情况下使用。
#include <iostream>
using namespace std;
//用结构体类型来表示一个结点
typedef struct node
{
//数据域
char name[20];
int age;
//指针域
struct node* next;
}student;
//typedef是重命名,下面申明结点时不用写struct node,而用student代替
//创建链表
student * createlist(int n)//n表示结点个数
{
student* head = new student;//头结点,动态,存在堆上
//一般头结点不存储数据
//student head;//存在栈上,用于函数内部,所以一般情况下,结点都是动态生成
student* pre = head;//pre用来记录上一个结点
//利用for 循环构建结点
for (int i = 0; i < n; i++)
{
student* p = new student;
cin >> p->name >> p->age;
pre->next = p;
pre = p;
p->next = NULL;
}
return head;
}
void display(student* head)
{
student* p = head->next;//p为第一个结点
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;
}