栈(stack) 是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈顶(top) ,相应地,表头端称为栈底(bottom) 。不含元素的空表称为空栈。
照搬代码
#include<stdio.h>
#include<malloc.h>
#define STACK_MAX_SIZE 10
/*
*Linear stack of integers. The key is data.
*/
typedef struct CharStack{
int top;
int data[STACK_MAX_SIZE];
}*CharStackPtr;
/*
*Output the stack.
*/
void outputStack(CharStackPtr paraStack){
for(int i=0;i<=paraStack->top;i++){
printf("%c",paraStack->data[i]);
}//of for i
printf("\r\n");
}//of outputStack
CharStackPtr CharStackInit(){
CharStackPtr resultPtr = (CharStackPtr)malloc(sizeof(CharStack));
resultPtr->top = -1;
return resultPtr;
}//of CharStackInit
void push(CharStackPtr paraStackPtr,int paraValue){
//step 1.space check
if(paraStackPtr->top>=STACK_MAX_SIZE - 1)
{
printf("Cannot push element:stack full.\r\n");
return;
}//of if
//step 2.update the top.
paraStackPtr->top ++;
//step 3.push element.
paraStackPtr->data[paraStackPtr->top] = paraValue;
}//of push
/*
*pop an element from the stack
*@return the poped value.
*/
char pop(CharStackPtr paraStackPtr){
//step 1.space check
if(paraStackPtr->top<0){
printf("Cannot pop element:stack empty.\r\n");
return '\0';
}//of if
//step 2.update the top.
paraStackPtr->top --;
//step 3.push element.
return paraStackPtr->data[paraStackPtr->top + 1];
}//of pop
/*
*test the push function
*/
void pushPopTest(){
printf("----pushPopTest begins.----\r\n");
//initialize
CharStackPtr tempStack = CharStackInit();
printf("After initialization,the stack is: ");
outputStack(tempStack);
//pop
for(char ch='a';ch<'m';ch++){
printf("pushing %c.\r\n,ch");
push(tempStack,ch);
outputStack(tempStack);
} //of for i
printf("----pushpoptest ends.----\r\n");
}//of pushpoptset
/*
*the entrance
*/
int main()
{
pushPopTest();
}//of main
运行截图