数据结构之链栈(参考整理严蔚敏数据结构)

来源:互联网 发布:java 垃圾回收算法 编辑:程序博客网 时间:2024/06/05 16:40
#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 ListPrinttypedef 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;elsereturn 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;}

0 0