顺序出栈操作
#include "stdio.h"
#include "stdlib.h"#define OK 1
#define ERROR 0
/* 存儲空間初始分配量 */
#define MAXSIZE 20typedef int Status;
/* SElemType類型根據(jù)實際情況而定,這里假設(shè)為int */
typedef int SElemType;/* 順序棧結(jié)構(gòu) */
typedef struct
{SElemType data[MAXSIZE];int top; /* 用于棧頂指針 */
}SqStack;/* 構(gòu)造一個空棧S */
Status InitStack(SqStack *S)
{/* S.data=(SElemType *)malloc(MAXSIZE*sizeof(SElemType)); */S->top=-1;return OK;
}/* 從棧底到棧頂依次對棧中每個元素顯示 */
Status StackTraverse(SqStack S)
{int i;i=0;while(i<=S.top){visit(S.data[i++]);}printf("\n");return OK;
}Status visit(SElemType c)
{printf("%d ",c);return OK;
}/* 插入元素e為新的棧頂元素 */
Status Push(SqStack *S,SElemType e)
{if(S->top == MAXSIZE -1) /* 棧滿 */{return ERROR;}S->top++; /* 棧頂指針增加一 */S->data[S->top]=e; /* 將新插入元素賦值給棧頂空間 */return OK;
}/* 若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR */
Status Pop(SqStack *S,SElemType *e)
{if(S->top==-1)return ERROR;*e=S->data[S->top]; /* 將要刪除的棧頂元素賦值給e */S->top--; /* 棧頂指針減一 */return OK;
}int main()
{SqStack s;int opp;int j, value, e;if(InitStack(&s)==OK){printf("順序棧初始化成功。");StackTraverse(s);}printf("\n1.隨機給棧賦值 \n2.棧遍歷 \n3.進棧 \n4.出棧");printf("\n0.退出 \n請選擇你的操作:\n");while(opp != '0'){scanf("%d",&opp);switch(opp){case 1:srand(time(0));for(j=1;j<=10;j++){Push(&s,rand()%100+1);}StackTraverse(s);break;case 2:StackTraverse(s);break;case 3:printf("請輸入需要進棧的元素:");scanf("%d", &value);Push(&s, value);StackTraverse(s);break;case 4:Pop(&s,&e);printf("彈出的棧頂元素 e=%d\n",e);StackTraverse(s);break;case 0:exit(0);}}
}
總結(jié)
- 上一篇: 整数划分问题(递归法)
- 下一篇: 分解 n!