数据结构--顺序栈和链式栈
来源:互联网 发布:免费越狱软件 编辑:程序博客网 时间:2024/06/05 16:24
http://www.cnblogs.com/jingliming/p/4602458.html
栈是一种限定只在表尾进行插入或删除操作,栈也是线性表表头称为栈的底部,表尾称为栈的顶部,表为空称为空栈,栈又称为后进先出的线性表,栈也有两种表示:顺序栈与链式栈顺序栈是利用一组地址连续的存储单元,依次存放从栈底到栈顶的数据元素,附设一个指针指示栈顶的元素在栈中的位置。
1 //顺序栈的实现 2 #define INFINITY 65535 3 #define MAXSIZE 1000 4 #define ElemType int 5 6 typedef struct { 7 ElemType data[MAXSIZE]; //栈的大小 8 int top; //栈顶的游标 9 }Stack;10 11 class ArraryStack{12 public:13 void initStack(Stack *s); //初始化栈14 15 bool isEmpty(Stack *s); //判断栈是否为空16 17 ElemType Top(Stack *s); //返回栈顶的元素18 19 ElemType Pop(Stack *s); //返回并删除栈顶的元素20 21 void Push(Stack *s,ElemType e); //将元素e压栈22 23 void Print(Stack *s); //输出从栈底到栈顶的元素24 25 void Clear(Stack *s); //清空栈元素26 27 };28 29 void ArraryStack::initStack(Stack *s)30 {31 s->top=-1;32 }33 34 bool ArraryStack::isEmpty(Stack *s)35 {36 if (s->top==-1)37 {38 return true;39 }40 return false;41 }42 43 ElemType ArraryStack::Top(Stack *s)44 {45 if (!isEmpty(s))46 {47 return s->data[s->top];48 }49 return INFINITY;50 }51 52 ElemType ArraryStack::Pop(Stack *s)53 {54 if (!isEmpty(s))55 {56 return s->data[s->top--];57 }58 return INFINITY;59 }60 61 void ArraryStack::Push(Stack *s,ElemType e)62 {63 if(s->top>=MAXSIZE-1)64 return;65 ++s->top;66 s->data[s->top]=e;67 68 }69 70 void ArraryStack::Print(Stack *s)71 {72 for (int i=0;i<=s->top;i++)73 {74 printf("%d ",s->data[i]);75 }76 printf("\n");77 }78 79 void ArraryStack::Clear(Stack *s)80 {81 s->top=-1;82 }
回到顶部(go to top)
第二部分:链式栈的实现
1 //链式栈的声明 2 template<typename T> 3 struct LinkNode{ 4 5 LinkNode* next; 6 T data; 7 }; 8 9 //链式栈的实现 10 template<typename T> 11 class LinkStack 12 { 13 public: 14 LinkStack(); 15 ~LinkStack(); 16 void Push(T value); 17 T Pop(); 18 T Top(); 19 int Size(); 20 bool isEmpty(); 21 22 private: 23 LinkNode<T> *pHead; 24 }; 25 26 template<typename T> 27 LinkStack<T>::LinkStack() 28 { 29 30 pHead=new LinkNode<T>; 31 if(pHead==NULL) 32 cout<<"构建头结点空间失败。"<<endl; 33 else 34 { 35 pHead->next=NULL; 36 pHead->data=NULL; 37 } 38 } 39 40 template<typename T> 41 LinkStack<T>::~LinkStack() 42 { 43 44 } 45 46 template<typename T> 47 void LinkStack<T>::Push(T value) 48 { 49 LinkNode<T> *p=new LinkNode<T>; 50 p->data=value; 51 p->next=pHead->next; 52 pHead->next=p; 53 } 54 55 template<typename T> 56 T LinkStack<T>::Pop() 57 { 58 T value; 59 LinkNode<T> *p=pHead->next; 60 if (p!=NULL) 61 { 62 value= p->data; 63 pHead->next=p->next; 64 delete p; 65 p=NULL; 66 return value; 67 } 68 else 69 { 70 71 cout<<"没有结点"<<endl; 72 return NULL; 73 } 74 75 } 76 77 template<typename T> 78 T LinkStack<T>::Top() 79 { 80 LinkNode<T> *p=pHead->next; 81 if (p!=NULL) 82 { 83 T value=p->data; 84 return value; 85 } 86 else 87 { 88 89 cout<<"头结点为空。"<<endl; 90 return NULL; 91 } 92 } 93 94 template<typename T> 95 int LinkStack<T>::Size() 96 { 97 int count=0; 98 LinkNode<T> *p=pHead->next; 99 while(p!=NULL)100 {101 102 ++count;103 p=p->next;104 }105 return count;106 }107 108 template<typename T>109 bool LinkStack<T>::isEmpty()110 {111 LinkNode<T> *p=pHead->next;112 if (p==NULL)113 {114 return true;115 }116 return false;117 }
测试用例:
1 int main() 2 { 3 LinkStack<int> sta; 4 sta.Push(1); 5 sta.Push(2); 6 sta.Push(3); 7 cout << "The size of the stack now is " << sta.Size() << endl; 8 sta.Pop(); 9 cout << "The top element is " << sta.Top() << endl; 10 cout << "The size of the stack now is" << sta.Size() << endl; 11 if (sta.isEmpty()) 12 { 13 cout << "This stack is empty." << endl; 14 } 15 else 16 { 17 cout << "This stack is not empty." << endl; 18 } 19 system("pause");20 return 0;21 }
阅读全文
0 0
- 数据结构--顺序栈和链式栈
- 数据结构之栈(顺序栈和链式栈)
- 数据结构Java实现05----栈:顺序栈和链式堆栈
- Java数据结构05----栈:顺序栈和链式堆栈
- 数据结构Java实现05----栈:顺序栈和链式堆栈
- 数据结构Java实现05----栈:顺序栈和链式堆栈
- 数据结构Java实现05----栈:顺序栈和链式堆栈
- 数据结构-【栈】的链式存储和顺序存储
- 数据结构-栈的顺序存储和链式存储
- 数据结构(顺序单链表、链式单链表、顺序栈、链式栈、顺序队列、链式队列)
- 顺序栈和链式栈
- 顺序栈和链式栈
- 重温数据结构:栈的顺序表示和实现与栈的链式表示和实现
- 数据结构与算法分析(c++版) #8 顺序栈和链式栈
- 数据结构笔记之用C++实现顺序栈和链式栈
- 数据结构存储的顺序和链式对比
- 数据结构存储的顺序和链式对比
- 数据结构存储的顺序和链式对比
- An internal error occurred during: "reload maven project". java.lang.NullPointerException
- 数据可视化(三)- Seaborn简易入门
- 008 矩阵性质及习题
- 华为3
- 线性回归
- 数据结构--顺序栈和链式栈
- 随笔17.10.26
- Unity3D学习笔记2-应用脚本控制物体运动
- 网络编程的概述2 网络通信中的三要素3 InetAddress的概述和测试,IP地址:InetAddress 传输协议(网络协议)TCP 可靠协议,需要连接,效率会稍低 没有大小的限制UDP 不:
- 依赖注入的方式以及优缺点
- 二维数组的遍历
- ZKW费用流 模板
- Linux操作系统与实训教程 第一章 Linux概述
- LeetCode刷题(22)