数据结构---单链表
目录
判断单链表是否为空
表中无元素,称为空链表(头指针和头结点依然存在)
判断头结点的指针域是否为空
void ShowList(LinkList L) {
LinkList p;
p = L->next;
cout << "单链表为:";
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
销毁单链表
链表销毁后不存在
从头指针开始,依次释放所有的结点
Status DestroyList_L(LinkList &L)
{
Lnode *p;
while(L)
{
p=L;
L=L->next;
delete p;
}
return OK;
}
清空单链表
链表仍然存在,但链表中无元素,为空链表(头指针和头结点仍然存在)
依次释放所有结点,并将头结点指针域设置为空
Status ClearList_L (LinkList &L)
{
Lnode *p,*q;
p=L->next;
while(p)
{
q=p->next;
delete p;
p=q;
}
L->next=NULL;
return OK;
}
求单链表的表长
从首元结点开始,依次计数所有结点
int ListLength_L(LinkList L)
{
LinkList p;
p=L->next;
i=0;
while(p)
{
i++;//先判断p是否为空,再进行计数
p=p->next;
}
return i;
}
运行代码
#include<iostream>
using namespace std;
typedef struct Lnode
{
int data;
struct Lnode* next;
}Londe, * Linklist;
bool InitList_L(Linklist& L)
{
L = new Lnode;
if (!L)
return false;
L->next = NULL;
return true;
}
void CreateList(Linklist& L, int n) {
Linklist r, p;
L = new Lnode;
L->next = NULL;
r = L;
cout << "请输入单链表:";
for (int i = 0; i < n; i++) {
p = new Lnode;
cin >> p->data;
p->next = NULL;
r->next = p;
r = p;
}
}
void ShowList(Linklist L) {
Linklist p;
p = L->next;
cout << "单链表为:";
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void ShowList(Linklist L) {
Linklist p;
p = L->next;
cout << "单链表为:";
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void DestroyList_L(Linklist& L)
{
Lnode* p;
while (L)
{
p = L;
L = L->next;
delete p;
}
}
void ClearList_L(Linklist& L)
{
Lnode* p, * q;
p = L->next;
while (p)
{
q = p->next;
delete p;
p = q;
}
L->next = NULL;
}
int ListLength_L(Linklist L)
{
Linklist p;
p = L->next;
int i = 0;
while (p)
{
i++;//先判断p是否为空,再进行计数
p = p->next;
}
return i;
}
int main()
{
Linklist L;
InitList_L(L);
CreateList(L,5);
ShowList(L);
DestroyList_L(L);
ShowList(L);
ClearList_L(L);
ShowList(L);
cout<<"链表长为:"<<ListLength_L(L);
return 0;
}