- 什么是链表
链表是一种常见的重要的数据结构。它是动态进行储存分配的一种结构
- 和数组的区别
数组存放数据时,必须事先定义数组长度,如果不知道具体长度,只能定义一个足够大的长度
链表则没有这种缺点,他能根据需要开辟内存单元
- 结点
每个结点包括两个数据,用户实际的数据+下一个结点的地址
- 最后一个元素
该元素不在指向其他元素,它的地址部分放NULL;
- 静态链表
这个例子比较简单,所有结点都是在程序中定义的,不是临时开辟的,也不能用完后释放,这种链表成为静态连表
#include<stdio.h> struct MyStruct { int id; float score; MyStruct *next; }; int main() { struct MyStruct a, b, c, *head, *p; a.id = 111; a.score = 1.1; b.id = 222; b.score = 2.2; c.id = 333; c.score = 3.3; head = &a; a.next = &b; b.next = &c; c.next = NULL; p = head; while (p!=NULL) { printf("%d,%lf ", p->id, p->score); p = p->next; } }
- 建立动态连表
所谓建立动态链表是指在程序运行当中从未到有地建立一个链表,即是一个个地开辟结点和输入各结点的数据,并建立起前后相连的关系
#include<iostream>//最简单的链表
using namespace std;
struct stu
{
int id;
double score;
stu *next;
};
int n=0;
stu * creat()//创建链表,输入数据返回头结点
{
stu *p1,*p2,*head;
p1=p2=new stu();//很重要这块,考试之前一定打在打两遍 ,一个个建立结点,开辟空间
head=NULL;
cin>>p1->id>>p1->score;
while(p1->id!=0)//五角星
{
n++;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=new stu();
cin>>p1->id>>p1->score;
}
p2->next=NULL;
return head;
}
void print(stu *head)//遍历链表
{
stu *p;
p=head;
while(p!=NULL)//是while不是if
{
cout<<p->id<<p->score<<endl;
p=p->next;
}
}
int main()
{
stu *p;
p=creat();
print(p);
}