解题思路:
①:输入操作次数n
②:输入n次操作
③:P x :代表push操作,把x入栈
④:O :代表出栈操作
⑤:A :当栈不为空的时候,输出栈顶元素,栈为空的时候输出E
注意事项:
1):用字符串c[2]存放输入的P O A,虽然一次只存放一个字符,但是这样的好处是不用重复清空缓存区
的回车
2):c[2]长度一定要为2,应为c[0]存放P O A,C[1]='\0', 若长度为1提交超时
3):一般Push操作要判断栈是否溢出(链栈除外),这题可以不用,因为开辟的栈大小为n,n步以内不会满
4):Pop操作一定要判断栈是否为空,空则不能top--,否则会栈下溢
5):这里栈顶指针top起始为-1,也可以为0,但要修改其余操作函数
6):每组数据完后要换行
参考代码:
#include <stdio.h> #include <malloc.h> typedef struct Stack_ { int *Data; int top; int length; /*空间长度,判断栈是否溢出使用*/ }*Stack, STACK; void init_( Stack s ); /*初始化栈*/ void Push( int x, Stack s ); /*入栈*/ void Pop( Stack s ); /*出栈*/ int Gettop( Stack s ); /*获得栈顶元素*/ int StackEmpty( Stack s ); /*判断栈空*/ /*----------------------------------------------------------*/ int main() { int n; char c[2]; STACK s; while ( scanf( "%d", &n ) != EOF ) { getchar(); /*清空缓存区*/ s.Data = (int *) malloc( n * sizeof(int) ); s.length = n; /*保存栈大小*/ init_( &s ); /*栈初始化*/ for ( int i = 0; i < n; i++ ) { scanf( "%s", c ); switch ( c[0] ) { case 'P': { int x; scanf( "%d", &x ); Push( x, &s ); break; } case 'O': { Pop( &s ); break; } case 'A': { if ( StackEmpty( &s ) ) /*栈空输出E,不为空输出栈顶元素*/ printf( "E\n" ); else printf( "%d\n", Gettop( &s ) ); break; } } } free( s.Data ); /*释放空间*/ printf( "\n" ); /*每组数据空一行*/ } return(0); } void init_( Stack s ) /*初始化栈*/ { s->top = -1; /*栈顶指针这里规定从-1,开始*/ } /*----------------------------------------------------------*/ void Push( int x, Stack s ) /*入栈操作*/ { if ( s->top + 1 >= s->length ) return; /*栈溢出*/ else s->Data[++s->top] = x; /*因为top起始为-1,所以要先++,找到push位置*/ } /*----------------------------------------------------------*/ void Pop( Stack s ) /*出栈*/ { if ( StackEmpty( s ) ) /*栈空则返回*/ return; else /*不空则pop*/ s->top--; } /*----------------------------------------------------------*/ int Gettop( Stack s ) /*获得栈顶元素*/ { int x = s->Data[s->top]; return(x); } /*----------------------------------------------------------*/ int StackEmpty( Stack s ) /*判断栈空*/ { if ( s->top == -1 ) return(1); else return(0); }
别忘点赞哦-.-
0.0分
15 人评分
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:1709 |
C语言程序设计教程(第三版)课后习题12.6 (C语言代码)浏览:789 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:639 |
C语言训练-列出最简真分数序列* (C语言代码)浏览:500 |
人见人爱A+B (C语言代码)浏览:625 |
P1001 (C语言代码)浏览:798 |
简单的a+b (C语言代码)浏览:681 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:587 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:853 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:664 |