目录
2.5 线性表的链式表示和实现5
1、单链表基本操作的实现
(1)补充单链表的几个常用简单算法
【补充算法3】清空链表。
链表仍存在,但链表中无元素,成为空链表(头指针和头结点仍然在)。
【算法思路】依次释放所有结点,并将头结点指针域设置为空。
//清空链表
Status ClearList(LinkList &L){//将L重置为空表
Lnode *p, *q;//或LinkList p, q;
p = L->next;
while(p){//没到表尾
q = p->next;
delete p;
p = q;
}
L->next = NULL;//头结点指针域为空
return OK;
}
2、具体实现
//具体实现
#include <stdio.h>
#include <stdlib.h>
//操作算法中用到的预定义常量和类型
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MaxSize 100
//Status是函数的类型,其值是函数结果状态代码
typedef int Status;
typedef int ElemType;
//单链表的初始化(算法2.6)(带头结点的单链表)
typedef struct Lnode{
ElemType data;
struct Lnode *next;
}LNode, *LinkList;
Status InitList_L(LinkList &L){
L = new LNode;//或L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
return OK;
}
//清空链表
Status ClearList(LinkList &L){//将L重置为空表
Lnode *p, *q;//或LinkList p, q;
p = L->next;
while(p){//没到表尾
q = p->next;
delete p;
p = q;
}
L->next = NULL;//头结点指针域为空
return OK;
}
int main(){
LinkList L;
int choice, ans;
while(1){
printf("线性表的链式表示和实现5(菜单):\n");
printf("1、单链表的初始化 2、单链表的清空\n");
printf("请输入菜单序号:\n");
scanf("%d", &choice);
switch(choice){
case 1:
ans = InitList_L(L);
if(ans){
printf("初始化成功\n");
}
else{
printf("初始化失败\n");
}
break;
case 2:
ans = ClearList(L);