奇偶栈!
stack.h
#pragma once #include<stdio.h> #include<assert.h> #include<stdlib.h> #define MAX_SIZE 10 typedef int DataType; typedef struct stack { DataType _arr[MAX_SIZE]; int _top1; int _top2; }stack; void stackinit(stack *s); void stackpush(stack *s,int data,int which); void stackpop(stack *s,int which); int stackempty(stack *s,int which); void stacksize(stack *s); void stackprint(stack *s);
stack.c
#include"stack.h" void stackinit(stack *s) { assert(s); s->_top1 = 0; s->_top2 = 1; } void stackpush(stack *s,int data,int which) { assert(s); assert(which ==1||which == 2); if (1 == which) { if (MAX_SIZE - 1 < s->_top1) { printf("栈1以满!\n"); return; } s->_arr[s->_top1] = data; s->_top1 += 2; } else { if (MAX_SIZE < s->_top2) { printf("栈2以满!\n"); return; } s->_arr[s->_top2] = data; s->_top2 += 2; } } void stackpop(stack *s,int which) { assert(s); assert(which == 1 || which == 2); if (1 == which) { if (0 == s->_top1) { printf("栈1为空!\n"); return; } s->_top1 -= 2; } else { if (0 == s->_top2) { printf("栈2为空!\n"); return; } s->_top2 -= 2; } } int stackempty(stack *s,int which) { assert(s); assert(which == 1 || which == 2); if (0 == s->_top1) { printf("栈1为空\n"); return 1; } if (1 == s->_top2) { printf("栈2为空\n"); return 1; } return 0; } void stacksize(stack *s) { assert(s); if (stackempty(s, 1)) return; else { printf("栈1的元素个数为:%d\n",(s->_top1 + 1) / 2); } if (stackempty(s, 2)) return; else { printf("栈2的元素个数为:%d\n", s->_top2 / 2); } } void stackprint(stack *s) { int i = 0; assert(s); if (stackempty(s, 1)) return; else { printf("栈1:"); for (i = 0;i < s->_top1;i += 2) { printf("%d->",s->_arr[i]); } printf("\n"); } if (stackempty(s, 2)) return; else { printf("栈2:"); for (i = 1; i < s->_top2; i += 2) { printf("%d->", s->_arr[i]); } printf("\n"); } for (i = 0; i < s->_top1; i++) { printf("%d->", s->_arr[i]); } } test() { stack s; stackinit(&s); stackpush(&s, 1, 1); stackpush(&s, 3, 1); stackpush(&s, 5, 1); stackpush(&s, 2, 2); stackpush(&s, 4, 2); stackpush(&s, 6, 2); stacksize(&s); stackprint(&s); } int main() { test(); system("pause"); return 0; }
相向栈!
stack.h
#pragma once #include<stdio.h> #include<assert.h> #include<stdlib.h> #define MAX_SIZE 10 typedef int DataType; typedef struct stack { DataType _arr[MAX_SIZE]; int _top1; int _top2; }stack; void stackinit(stack *s); void stackpush(stack *s,int data,int which); void stackpop(stack *s,int which); int stackempty(stack *s,int which); void stacksize(stack *s); void stackprint(stack *s);
stack.c
#include"stack.h" void stackinit(stack *s) { assert(s); s->_top1 = 0; s->_top2 = MAX_SIZE - 1; } void stackpush(stack *s,int data,int which) { assert(s); assert(which ==1||which == 2); if (s->_top1 == s->_top2) { printf("栈1以满!\n"); return; } if (1 == which) { s->_arr[s->_top1] = data; s->_top1 += 1; } else { s->_arr[s->_top2] = data; s->_top2 -= 1; } } void stackpop(stack *s,int which) { assert(s); assert(which == 1 || which == 2); if (1 == which) { if (0 == s->_top1) { printf("栈1为空!\n"); return; } s->_top1 -= 1; } else { if (MAX_SIZE - 1 == s->_top2) { printf("栈2为空!\n"); return; } s->_top2 += 1; } } int stackempty(stack *s,int which) { assert(s); assert(which == 1 || which == 2); if (0 == s->_top1) { printf("栈1为空\n"); return 1; } if (MAX_SIZE - 1 == s->_top2) { printf("栈2为空\n"); return 1; } return 0; } void stacksize(stack *s) { assert(s); if (stackempty(s, 1)) return; else { printf("栈1的元素个数为:%d\n",s->_top1 ); } if (stackempty(s, 2)) return; else { printf("栈2的元素个数为:%d\n",MAX_SIZE - 1 - s->_top2 ); } } void stackprint(stack *s) { int i = 0; assert(s); if (stackempty(s, 1)) return; else { printf("栈1:"); for (i = 0;i < s->_top1;i++) { printf("%d->",s->_arr[i]); } printf("\n"); } if (stackempty(s, 2)) return; else { printf("栈2:"); for (i = MAX_SIZE - 1; i > s->_top2; i--) { printf("%d->", s->_arr[i]); } printf("\n"); } } test() { stack s; stackinit(&s); stackpush(&s, 1, 1); stackpush(&s, 3, 1); stackpush(&s, 5, 1); stackpush(&s, 2, 2); stackpush(&s, 4, 2); stackpush(&s, 6, 2); stacksize(&s); stackprint(&s); } int main() { test(); system("pause"); return 0; }