原文地址:http://blog.csdn.net/hguisu/article/details/7674195

 1 ///栈的顺序存储,c++类实现
 2 #include "stdafx.h"
 3 #include "stdlib.h"
 4 #include <iostream>
 5 using namespace std;
 6 #define MAX 10
 7 
 8 class stack
 9 {
10 private:
11     int arr[MAX];
12     int top;
13 public:
14     stack(){
15         initStack();
16     }
17     //初始化栈
18     void initStack()
19     {
20         top = -1;
21     }
22     //入栈
23     void push(int a)
24     {
25         top++;
26         if(top<MAX)
27             arr[top] = a;
28         else
29             cout <<"STACK FULL"<<top;
30     }
31     //出栈
32     int pop()
33     {
34         if(isEmpty())
35         {
36             cout<<"STACK IS EMPTY";
37             return NULL;
38         }else
39         {
40             int data = arr[top];
41             arr[top] = NULL;
42             top--;
43             return data;
44         }
45     }
46     //是否为空
47     bool isEmpty()
48     {
49         if(-1 == top) return true;
50         else 
51             return false;
52     }
53 };
54 
55 int _tmain(int argc, _TCHAR* argv[])
56 {
57     stack a;
58     a.push(1);
59     a.push(2);
60     a.push(3);
61     cout<<"Pop:"<<a.pop();
62     cout<<"Pop:"<<a.pop();
63     cout<<"Pop:"<<a.pop();
64     cout<<"Pop:"<<a.pop();
65     
66     system("pause");
67     return 0;
68 }

链栈+汉诺塔

  1 #include "stdafx.h"
  2 #include "stdlib.h"
  3 #include <stdio.h>
  4 #include <iostream>
  5 using namespace std;
  6 
  7 #define TRUE 1
  8 #define FALSE 0
  9 #define OK 1
 10 #define ERROR 0
 11 #define INFEASIBLE -1
 12 #define OVERFLOW -2
 13 #define STACKEMPTY -3
 14 
 15 #define LT(a,b) ((a)<(b))
 16 #define N = 100
 17 
 18 typedef int Status;
 19 typedef int ElemType;
 20 
 21 typedef struct LNode{
 22     ElemType data;
 23     struct LNode* next;
 24 }LNode,*LinkList;
 25 
 26 typedef struct stack{
 27     LinkList top;
 28 }STACK;
 29 
 30 void InitStack(STACK &S);
 31 void Push(STACK &S,ElemType e);
 32 void Pop(STACK &S,ElemType *e);
 33 ElemType GetTop(STACK S,ElemType *e);
 34 int StackEmpty(STACK S);
 35 
 36 ///初始化
 37 void InitStack(STACK &S)
 38 {
 39     S.top = NULL;
 40 }
 41 ///入栈
 42 void Push(STACK &S,ElemType e)
 43 {
 44     LinkList p;
 45     p = (LinkList)malloc(sizeof(LNode));
 46     if(!p) exit(OVERFLOW);
 47     p->data = e;
 48     p->next = S.top;
 49     S.top = p;
 50 }
 51 ///
 52 void Pop(STACK &S,ElemType *e)
 53 {
 54     LinkList p;
 55     if(StackEmpty(S)) exit(STACKEMPTY);
 56     *e = S.top->data;
 57     p = S.top;
 58     S.top = p->next;
 59     free(p);
 60 }
 61 ///获取栈顶元素
 62 ElemType GetTop(STACK S,ElemType *e)
 63 {
 64     if(StackEmpty(S))exit(STACKEMPTY);
 65     *e = S.top->data;
 66 }
 67 ///判断栈S是否空
 68 int StackEmpty(STACK S)
 69 {
 70     if(S.top == NULL) return TRUE;
 71     return FALSE;
 72 }
 73 //遍历栈
 74 void  printStack(STACK S)
 75 {    
 76     LinkList p;
 77     p = S.top;
 78     printf("栈:");
 79     while(p)
 80     {
 81         printf("%d\t",p->data);
 82         p = p->next;
 83     }
 84 }
 85 //释放栈
 86 void freeStack(STACK S)  
 87 {  
 88     LinkList p = S.top;  
 89     while (S.top)  
 90     {  
 91         p = S.top->next;  
 92         free(S.top);  
 93         S.top = p;  
 94     }  
 95 }  
 96 /// 汉诺塔实现
 97 void move(STACK &s1,STACK &s2)
 98 {
 99     ElemType e;
100     Pop(s1,&e);
101     Push(s2,e);
102 }
103 void hanoi(int n,STACK &X,STACK &Y,STACK &Z)
104 {
105     if(n == 1) return move(X,Z);
106     hanoi(n-1,X,Z,Y);
107     move(X,Z);
108     hanoi(n-1,Y,X,Z);
109 }
110 
111 int _tmain(int argc, _TCHAR* argv[])
112 {
113     /*STACK S;
114     InitStack(S);
115     Push(S,1);
116     Push(S,2);
117     ElemType e;
118     Pop(S,&e);
119     cout <<"Pop elem:"<<e;*/
120 
121     STACK Sx,Sy,Sz;
122     InitStack(Sx);
123     InitStack(Sy);
124     InitStack(Sz);
125     int i,n = 10;
126     for(i = 10;i>=1;i--)
127     {
128         Push(Sx,i);
129     }
130     printStack(Sx);
131     
132     hanoi(n,Sx,Sy,Sz);
133     printStack(Sz);
134 
135     freeStack(Sx);
136     freeStack(Sy);
137     freeStack(Sz);
138     system("pause");
139     return 0;
140 }

 

posted on 2015-04-28 20:48  Liz-  阅读(161)  评论(0)    收藏  举报