栈
原文地址: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 }
浙公网安备 33010602011771号