#include<iostream>
using namespace std;
#define InitStack InitList
#define DestroyStack DestroyList
#define ClearStack ClearList
#define StackEmpty ListEmpty
#define StackLength ListLength
#define GetTop GetFirstElem
#define Push HeadInsert
#define Pop HeadDelete
#define StackPrint ListPrint
typedef int ElemType;
typedef struct Node
{
ElemType data;
Node *pNext;
}Node, *Link;
typedef Link Stack;
void InitList(Link &L)
{
L = new Node;
L->pNext = NULL;
}
void DestroyList(Link &L)
{
Link p = NULL;
while (L)
{
p = L->pNext;
delete L;
L = p;
}
}
void ClearList(Link &L)
{//只留下一个头结点
Link p = NULL, q = NULL;
p = L->pNext;
while (p)//p==pTail->pNext时退出
{
q = p->pNext;
delete p;
p = q;
}
L->pNext = NULL;
}
bool ListEmpty(Link L)
{
if (L->pNext)
return false;
else
return true;
}
int ListLength(Link L)
{
int i = 0;
Link p = L->pNext;
while (p)
{
++i;
p = p->pNext;
}
return i;
}
void HeadInsert(Link L, ElemType e)
{// 初始条件:线性表L已存在.
//操作结果:在L的头部插入新的数据元素e,作为链表的第一个元素
Link s = NULL;
s = new Node;
s->data = e;
s->pNext = L->pNext;
L->pNext = s;
}
bool HeadDelete(Link L, ElemType &e)
{
Link p = L->pNext;
if (p)
{
e = p->data;
L->pNext = p->pNext;
delete p;
p = NULL;
return true;
}
else//空表
return false;
}
bool GetFirstElem(Link L, ElemType &e)
{
Link p = L->pNext;
if (!p) // 空表
return false;
else // 非空表
{
e = p->data;
return true;
}
}
void ListPrint(Link L)
{
Link p = L->pNext;
while (p)
{
cout << p->data << " ";
p = p->pNext;
}
cout << endl;
}
int main(void)
{
Stack S = NULL;
ElemType e;
InitStack(S);
Push(S, 1);
Push(S, 2);
Push(S, 3);
Push(S, 4);
Push(S, 5);
StackPrint(S);
Pop(S, e);
StackPrint(S);
cout << StackLength(S) << endl;
if (!StackEmpty(S))
cout << "Not Empty!" << endl;
GetTop(S, e);
cout << e << endl;
return 0;
}
数据结构之链栈(参考整理严蔚敏数据结构)
最新推荐文章于 2023-05-07 14:25:54 发布