已知当前需要定义一个顺序栈结构对一组字符型数据(A、B、C、D、E、F、G、H、I、J、K、H、I)进行操作(假设当前定义的数据结构最多能存放100个数据)。现要求编写一个程序对这些数据进行以下操作:
A. 对所有数据进行入栈操作;
B. 对所有数据进行出栈操作,并输出每次出栈结点的值;
提示:
该题采用顺序栈的方法进行数据操作,首先定义一个字符型数组,该数组的大小为当前数据结构能够存放的最大元素个数(假设最大空间为100)。然后初始化一个空的顺序栈(调用init函数),根据题目要求,进行入栈操作(调用push函数),直到所有值全部入栈为止。然后输出栈顶结点的值(调用read函数),然后进行出栈操作(调用pop函数),直到所有的结点全部出栈为止。
输入格式:
输入一组字符型数据。
输出格式:
依次输出出栈的元素。(注意:输出出栈元素时,每个元素后面有一个空格)
输入样例:
ABCDEFGHIJKHI#
输出样例:
注意:输出出栈元素时,每个元素后面有一个空格
I H K J I H G F E D C B A
写了主要的压栈、出栈的代码,其他的可以参考实现。
#include <stdio.h>
typedef struct
{
char dat[100];
int pointer;
} Stack;
int pop(Stack *stp)
{
char rtn;
if(stp->pointer != 0)
{
rtn = stp->dat[stp->pointer];
stp->pointer--;
}
else
rtn=-1;
return rtn;
}
int push(char dat,Stack *stp)
{
stp->pointer++;
stp->dat[stp->pointer]=dat;
}
int main()
{
Stack sta= {{0},0};
char c;
while((c=getchar())!='#')
{
push(c,&sta);
}
while((c=pop(&sta))!=-1)
{
printf("%c ",c);
}
}