线性表链式存储有两个一个是单链表,另一个是双向链表,它们的特点:用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。
单链表的结构特点:
单链表的每个结点,都有两个域:其中存放数据的域称为data域,存放直接后继存储地址的域称为指针域。一个个的结点组成形成单链表
通常我们会将第一个节点不存放任何数据,next存放下一个结点的地址,这样的结点成为首元结点,方便我们操作链表。
用C++定义单链表的结构
typedef struct LNode{
int data; // 节点的数据域
struct LNode *next; // 结点的指针域
}LNode,*LinkList;
单链表的初始化
LNode* InitList(){ //传入一个 LinkList 的变量
//构造一个空的单链表
LinkList L = new LNode;
L->next = NULL;
return L; //返回 L表示构造成功。
}
后叉法创建单链表
需要先传入一个单链表的引用,传入创建几个结点,创建一个指针r 指向单链表L
接着创建结点用指针p指向该结点,输入数据后,需要将 r的next指向p,别忘记r要向后移动
void CreateList_R(LinkList &L,int n){
LinkList r = L;
for(int i=0;i<n;i++){
LinkList p = new LNode;
cout << "请输入值:"<< endl;
cin >> p->data;
p->next = NULL;
r->next = p;
r = p;
}
}
遍历单链表
void showLinkList(LinkList &L){
LinkList p = L->next;
while(p){
cout << p->data << " " << endl;
p = p->next;
}
}
销毁单链表
int DestroyList_L(LinkList &L){
LNode *p;
while(L!=NULL){
p = L;
L = L->next;
delete p;
}
return 1;
}
获取链表长度
int GetListLength(LinkList &L){
LinkList p;
p = L ->next;
int i = 0;
while(p){
i++;
p = p->next;
}
return i;
}
注意: 单链表并不向线性表那样查找方便,单链表对于插入和添加是很方便的。