成都手机网站开发,文创设计,邵阳县做网站,做酒店需要怎么上网站http://www.cnblogs.com/jingliming/p/4602458.html 栈是一种限定只在表尾进行插入或删除操作,栈也是线性表表头称为栈的底部,表尾称为栈的顶部,表为空称为空栈#xff0c;栈又称为后进先出的线性表,栈也有两种表示:顺序栈与链式栈顺序栈是利用一组地址连续的存储单元#xf…http://www.cnblogs.com/jingliming/p/4602458.html 栈是一种限定只在表尾进行插入或删除操作,栈也是线性表表头称为栈的底部,表尾称为栈的顶部,表为空称为空栈栈又称为后进先出的线性表,栈也有两种表示:顺序栈与链式栈顺序栈是利用一组地址连续的存储单元依次存放从栈底到栈顶的数据元素,附设一个指针指示栈顶的元素在栈中的位置。 1 //顺序栈的实现2 #define INFINITY 655353 #define MAXSIZE 10004 #define ElemType int5 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-topMAXSIZE-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 i0;is-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 templatetypename T3 struct LinkNode{4 5 LinkNode* next;6 T data;7 };8 9 //链式栈的实现10 templatetypename T11 class LinkStack12 {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 LinkNodeT *pHead;24 };25 26 templatetypename T27 LinkStackT::LinkStack()28 {29 30 pHeadnew LinkNodeT;31 if(pHeadNULL)32 cout构建头结点空间失败。endl;33 else34 {35 pHead-nextNULL;36 pHead-dataNULL;37 }38 }39 40 templatetypename T41 LinkStackT::~LinkStack()42 {43 44 }45 46 templatetypename T47 void LinkStackT::Push(T value)48 {49 LinkNodeT *pnew LinkNodeT;50 p-datavalue;51 p-nextpHead-next;52 pHead-nextp;53 }54 55 templatetypename T56 T LinkStackT::Pop()57 {58 T value;59 LinkNodeT *ppHead-next;60 if (p!NULL)61 {62 value p-data;63 pHead-nextp-next;64 delete p;65 pNULL;66 return value;67 }68 else69 {70 71 cout没有结点endl;72 return NULL;73 }74 75 }76 77 templatetypename T78 T LinkStackT::Top()79 {80 LinkNodeT *ppHead-next;81 if (p!NULL)82 {83 T valuep-data;84 return value;85 }86 else87 {88 89 cout头结点为空。endl;90 return NULL;91 }92 }93 94 templatetypename T95 int LinkStackT::Size()96 {97 int count0;98 LinkNodeT *ppHead-next;99 while(p!NULL)
100 {
101
102 count;
103 pp-next;
104 }
105 return count;
106 }
107
108 templatetypename T
109 bool LinkStackT::isEmpty()
110 {
111 LinkNodeT *ppHead-next;
112 if (pNULL)
113 {
114 return true;
115 }
116 return false;
117 } 测试用例 1 int main()2 {3 LinkStackint 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 }