顺序栈的基本操作

引入外部文件和初始条件

#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);
	}
}

 程序截图如下:

 

posted @ 2017-04-22 14:17  晓乎  阅读(851)  评论(0编辑  收藏  举报
总访问: counter for blog 次