链表——数据结构里的最基本单元,所以及见面了找工作/找实习的你,对链表最基本的知识与应用又了解多少呢?
不妨花个几分钟看完这篇,或许会有意想不到的收获!
首先什么是链表?
链表就是在系统内存中开辟的逻辑上连续但是物理上(或者是实际上)非连续的一个个空间,然后这些空间都又一个个指针连接起来,啥意思呢?来看个图吧,纯属直观手绘(虽然有点丑但是够形象)!
所以,我们可以很直观的看出,要创建一个链表,我们需要的元素就是这个框框(内存),还有这个箭头(指针),至于框框里面放的是什么?那肯定是内容啦!所以我们要将这些元素组织成一个结构体struct描述他们(当天组织成一个类class也是完全可以的),这里我们就创建一个链表来放学生信息吧
//首先组织结构体,这里我们别名这个结构体为Student只是为了我们后面书写简单
typedef struct node {
//表示数据域
int age;
char name[20];
//表示指针域
struct node* next;
}Student;
接着我们就来创建这个链表:
Student* creatList(int n) {
//在堆上动态申请一个头节点,一般头节点不存储数据。(如果在栈上申请的话,调用一次creat之后就会被释放掉)
Student* head = new Student;
//构造一个pre节点用来记录上一个节点,(每构造一个新的节点都需要上一个节点指向这个新创建的节点,pre最开始等于p的上一个节点也就是head节点)
Student* pre = head;
//构造节点
for (int i = 0; i < n; i++)
{
Student* p = new Student; //创建n个节点
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 << ","