顺序栈的基本操作
引入外部文件和初始条件
#include<stdlib.h> #include<stdio.h> #define MAXSIZE 100
顺序栈的存储结构:须有一个一维数组去存放栈中的基本元素,还要栈顶指针,用来存放栈顶元素的下标
typedef struct SqStack{ int elem[MAXSIZE]; int top; }SqStack,*stack_type;
结构如下
接着开始栈的初始化
stack_type Init_SqStack() { //创建一个顺序栈,返回一个指向顺序栈的指针,为0表示分配空间失败 SqStack *S; S=(stack_type)malloc(sizeof(SqStack)); if(S) { S->top=-1; printf("置空栈成功!\n"); } return S; }
判断栈是否为空
//判断栈是否为空,空表示0,非空表示1 int Empty_Stack(stack_type S) { if(S->top==-2) return 0; else return 1; }
往栈中插入元素
//往栈顶插入元素x,返回1表示插入成功,返回0表示插入失败 int Push_SqStack(stack_type S) { if(S->top==MAXSIZE-1) { printf("栈已经满了!\n"); return 0; } else printf("请输入需要入栈的个数:"); if(S->top<0) { //栈的初始化数据入栈,一次性输入多个元素 int n; scanf("%d",&n); printf("请依次输入需要入栈的元素:\n"); while(S->top<n-1) { S->top++; scanf("%d",&S->elem[S->top]); } }else{ //栈的后期数据输入,一个一个入栈 printf("请插入你要入栈的元素:"); S->top++; scanf("%d",&S->elem[S->top]); } printf("push the elements success!\n"); return 1; }
出栈操作:
//删除栈顶元素并保存在向量x中,返回1表示出栈成功 int Pop_Stack(stack_type S,int *tmp) { if(!Empty_Stack(S)) { printf("栈是空的!\n"); return 0; } else{ *tmp=S->elem[S->top]; S->top--; return 1; } }
获取栈顶元素
//取得栈顶元素 int getTop_SqStack(stack_type S,int *data) { if(!Empty_Stack(S)) { printf("这是一个空栈!\n"); return 0; }else{ *data=S->elem[S->top]; return 1; } }
栈中元素的打印
void print_stack(stack_type s) { int i=s->top; for(;i>=0;i--) printf("%d ",s->elem[i]); printf("\n"); }
主程序如下
void main() { int select,data,k; stack_type s; printf("\n*************************\n"); printf("*****1、栈的初始化*********\n"); printf("*****2、数据入栈***********\n"); printf("*****3、数据出栈***********\n"); printf("*****5、栈的打印***********\n"); printf("*****6、退出***************\n"); printf("***************************\n"); printf("请选择相应的操作\n"); scanf("%d",&select); while(select) { switch(select) { case 1:s=Init_SqStack();break; case 2:Push_SqStack(s);break; case 3:Pop_Stack(s,&data); printf("出栈的元素为:%d\n",data); break; case 4:k=getTop_SqStack(s,&data); if(k) printf("栈顶元素是%d\n",data); break; case 5:print_stack(s); break; case 6:exit(0); } printf("请选择相应的选项\n"); scanf("%d",&select); } }
程序截图如下:
很希望自己是一棵树,守静、向光、安然,敏感的神经末梢,触着流云和微风,窃窃的欢喜。脚下踩着最卑贱的泥,很踏实。还有,每一天都在隐秘成长。