根据严蔚敏数据结构(C语言版)第37页改写
#include<iostream>
using namespace std;
#define ElemType int
typedef struct LNode//结点
{
ElemType data;
struct LNode *next;
}*Link, *Position;
typedef struct//链表
{
Link head, tail;//头结点和尾节点
int len;//链表长度(数据元素个数)
}LinkList;
bool MakeNode(Link &p, ElemType e)
//分配由p针指向值为e的结点
{
if (!(p = (Link)malloc(sizeof(LNode))))return false;
p->data = e;
return true;
}
void FreeNode(Link &p)
//释放p指向结点
{
free(p);
}
bool InitList(LinkList &L)
//构造一个空链表
{
L.head = L.tail = NULL;
L.len = 0;
return true;
}
bool DestroyList(LinkList &L)
//摧毁线性表L,L即将不再存在
{
Link p = L.head;
Link q;
while (p != L.tail)
{
q = p->next;
free(p);
p = q;
}
free(p);
L.len = 0;
return true;
}
bool ClearList(LinkList &L)
//将L重置为空标,释放原链表结点
{
if (L.head == L.tail)return true;
Link p = L.head->next;
Link q;
while (