顺序栈

 1 #include <iostream>
 2 #include <assert.h>
 3
 4 using namespace std;
 5
 6 template<class T>
 7 class STACK
 8 {
 9 public:
10     STACK(int sz = 100):top(-1), maxLen(sz)
11     {
12         date = new T[sz];
13         assert(date != NULL);
14     }
15     ~STACK(){delete []date;}
16     void Push(const T& a);
17     bool Pop(T& x);
18     bool Top(T& x);
19     bool Empty() const{return top == -1;}
20     bool Full(){return top == maxLen-1;}
21     int Size(){return top+1;}
22     void Clear(){top = -1;}
23     friend ostream& operator << (ostream& os, const STACK<T>& s)
24     {
25         for(int i = 0; i <= s.top; i++)
26             os<<s.date[i]<<" ";
27         return os;
28     }
29 private:
30     T *date;
31     int top;
32     int maxLen;
33     void overflow();
34 };
35
36 template<class T>
37 bool STACK<T>::Top(T& x)
38 {
39     if(Empty())return false;
40     x = date[top];
41     return true;
42 }
43
44 template<class T>
45 void STACK<T>::overflow()
46 {
47     T* newdate = new T[maxLen<<1];
48     if(newdate == NULL)return;
49     for(int i = 0; i <= top; i++)
50         newdate[i] = date[i];
51     maxLen <<= 1;
52     delete []date;
53     date = newdate;
54 }
55
56 template<class T>
57 void STACK<T>::Push(const T& a)
58 {
59     if(Full())overflow();
60     date[++top] = a;
61 }
62
63 template<class T>
64 bool STACK<T>::Pop(T& x)
65 {
66     if(Empty())return false;
67     x = date[top--];
68     return true;
69 }
70
71 int main()
72 {
73     int tmp;
74     STACK<int> s;
75     for(int i = 0; i < 10; i++)
76         s.Push(i);
77     cout << s << endl;
78     s.Pop(tmp);
79     cout << s << endl;
80     s.Top(tmp);
81     cout << tmp << endl;
82     return 0;
83 }
时间: 2024-10-07 05:29:51

顺序栈的相关文章

数据结构Java实现05----栈:顺序栈和链式堆栈

数据结构Java实现05----栈:顺序栈和链式堆栈 一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作. 先进后出:堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底.堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈. 备注:栈本身就是一个线性表,所以我们之前讨论过线性表的顺序存储和链式存储,对于栈来说,同样适

顺序栈用C语言实现

从数据结构的角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,它们是操作受限的线性表: 但从数据类型角度来看,它们是和线性表大不相同的两种重要的抽象数据类型. 顺序栈,即栈的顺序存储结构是用一组地址连续的存储单元依次存放自栈顶到栈顶的数据元素 typedef struct { int * base; //栈底指针,在栈构造之前和摧毁之后,base的值为NULL int * top; //栈顶指针,在非空栈始终指向栈顶元素的下一个位置 int stacksize; //

括号匹配问题(顺序栈实现)

本周老师作业留了两个.先上传一个吧.那个有时间我再传上来~ 本周的要求: 1.给出顺序栈的存储结构定义. 2.完成顺序栈的基本操作函数. 1)      初始化顺序栈 2)      实现入栈和出栈操作 3)      实现取栈顶元素和判空操作 括号匹配问题 3.编写主函数实现基本操作函数功能,并设置测试数据,测试合法和非法数据的输出结果. 4.程序调试运行并保存输出结果. 5.整理并提交实验作业. 1 #include <cstdio> 2 #include <cstring>

java实现顺序栈

顺序栈类的代码: package sequencestack; public class SequenceStack { private int STACK_INIT_SIZE = 5;//栈的原始大小 private int INCREMENT =1;//栈的增量大小 private Object []Stack = null; private int base; private int top; private int stacksize; /** * 初始化栈 * */ void init

(001)顺序栈的C++实现

(001)顺序栈的C++实现 2014/12/4     jxlijunhao 这里通过C++模板类来实现一个顺序栈: 1)初始化 2)入栈 3)出栈 4)取栈顶元素 在顺序栈中(一个数组中),操作的总是发生在数组的末尾 定义一个头文件 #ifndef SQ_STACK_H #define SQ_STACK_H #include<iostream> using namespace std; template<class T> class sq_stack { private: in

顺序栈(1)课本

//顺序栈是实现,是数据结构课本上的 #include <iostream> using namespace std; typedef int Elmtype; //#define stacksize 100 #define SElemType int #define STACK_INIT_SIZE 100 #define TRUE 1 #define FLASE 0 #define OK 1 #define ERROR 0 //#define OVERFLOW -2 #define INFE

数据结构--顺序栈的实现

最近在看严蔚敏的数据结构,以下是参照 http://blog.csdn.net/WLxinliang/article/details/52894338 手写的顺序栈的实现代码: 1.头文件定义了常数项 //constant.h #include<iostream> #include<string.h> #include<stdlib.h> #include<malloc.h> using namespace std; #define TRUE 1 #defi

C++__顺序栈(练习)

顺序栈 stack.h #ifndef STACK_H_ #define STACK_H_ #define STACK_SIZE 5 typedef int data_type; enum STACK_OP { STACK_ERR = -1, STACK_OK, STACK_EMPTY }; class STACK { private: data_type data[STACK_SIZE]; int Top; public: STACK(); ~STACK(); data_type getDat

浅谈数据结构之顺序栈(三)

栈:是限定仅在表尾进行插入与删除操作的线性表.我们把允许插入与删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的称为空栈.栈的插入操作,叫作进栈,也叫压栈.入栈,类似于子弹入弹夹:栈的删除操作,叫作出栈,也叫弹栈,如同弹夹中的子弹出夹.注意:栈的定义中的"表尾"指的是"栈顶",而不是"栈底". 首先,栈是一个线性表,也就是说:栈具有线性结构,即前驱后继关系:只不过它是一个特殊的线性表而已,它的特殊之处在于限制了这个线性表的插入与删除位置,它始

顺序栈的实现

顺序栈的实现如下: