C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
#include<stdio.h>
#include "stdlib.h" #include "string.h" #include "math.h" #include "time.h" #define MAX 20 typedef struct { int data[MAX]; int top1; int top2; } SqDoubleStack; int InitStack(SqDoubleStack *s) { s->top1 = - 1; s->top2 = MAX; return 1; } int Push(SqDoubleStack *s, int i, int j) { if (s->top1 + 1 == s->top2) return - 1; if (j == 1) s->data[++s->top1] = i; else if (j == 2) s->data[--s->top2] = i; return 1; } int StackTraverse(SqDoubleStack s) { int i; i = 0; while (i <= s.top1) { printf( "%d", s.data[i++]); } i = s.top2; while (i < MAX) { printf( "%d", s.data[i++]); } printf( "\n"); return 1; } int StackLength(SqDoubleStack s) { int i; i = s.top1 + 1 + (MAX - s.top2); return i; } int Pop(SqDoubleStack *s, int *e, int j) { if (j == 1) { if (s->top1 == - 1) return - 1; else *e = s->data[s->top1--]; } if (j == 2) { if (s->top2 == MAX) return - 1; else *e = s->data[s->top2--]; } return 1; } int StackEmpty(SqDoubleStack s) { if ((s.top1 == - 1) && (s.top2 == MAX)) return 1; else return - 1; } int ClearStack(SqDoubleStack *s) { s->top1 = - 1; s->top2 = MAX; return 1; } int main( void) { int i; SqDoubleStack s; int e; if (InitStack(&s) == 1) { for (i = 1; i <= 5; i++) Push(&s, i, 1); for (i = MAX; i >= MAX - 2; i--) Push(&s, i, 2); } printf( "栈中的元素为:"); StackTraverse(s); printf( "栈的长度为:%d\n", StackLength(s)); Pop(&s, &e, 2); printf( "移出的栈顶元素为:%d\n", e); printf( "栈是否为空(1为空, -1为非空)%d\n", StackEmpty(s)); ClearStack(&s); printf( "清空后栈是否为空(1为空, -1为非空)%d\n", StackEmpty(s)); } |