使用顺序栈,接收键盘的输入,实现如下功能:
- 输入数字时,依次入栈。
- 输入字母时,依次出栈。
- 每次入栈或者出栈,都将顺序栈中的各个元素输出出来。
代码:
#include <stdio.h> #include <stdlib.h> #define DATATYPE int typedef DATATYPE datatype; typedef struct { datatype *data; int size; int top; } seqStack; //初始化栈 seqStack *initStack(int size) { seqStack *s = (seqStack *)malloc(sizeof(seqStack)); if (s != NULL) { s->data = (datatype *)malloc(sizeof(datatype) * size); if (s->data == NULL) { free(s); return NULL; } } s->size = size; s->top = -1; return s; } //判断栈是否满 int ifFull(seqStack *s) { if (s->top == s->size - 1) return 1; } //判断栈是否空 int ifNULL(seqStack *s) { if (s->top == -1) return 1; } //入栈 int Push(seqStack *s, int data) { if (ifFull(s) == 1) return 0; s->data[++(s->top)] = data; return 1; } //出栈 int Pop(seqStack *s) { if (ifNULL(s)) return 0; s->top--; return 1; } //显示栈中数据 void show(seqStack *s, int flag) { if (flag == 1) { printf("栈中数据:"); while (s->top != -1) printf("%c ", s->data[(s->top)--]); } if (flag == 0) { printf("栈中数据:"); while (ifNULL(s) != 1) printf("%c ", s->data[(s->top)--]); } } int main() { char a; int flag; seqStack *s = initStack(100); printf("输入数字'0'为结束标志,输入字母'a'为结束标志:\n"); while (1) { scanf("%c", &a); if (a >= '0' && a <= '9') { flag = 1; if (a == '0') //结束标志 break; Push(s, a); } else if (a >= 'a' && a <= 'z' || a >= 'A' && a <= 'Z') { flag = 0; if (a == 'a') //结束标志 break; Pop(s); } } show(s, flag); }