天天看点

3.1实现顺序栈的各种基本运算

注意:GetTop函数与Pop函数的比较,只是少了s->top++

程序代码:

sqstack.cpp

//顺序栈基本运算算法
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;

typedef struct 
{	
	ElemType data[MaxSize];
	int top;				//栈指针
} SqStack;					//顺序栈类型

void InitStack(SqStack *&s)
{
	s=(SqStack *)malloc(sizeof(SqStack));
	s->top=-1;
} 

void DestroyStack(SqStack *&s)
{
	free(s);
}

bool StackEmpty(SqStack *s)
{
	return(s->top==-1);
}

bool Push(SqStack *&s,ElemType e)
{
	if (s->top==MaxSize-1)    //栈满的情况,即栈上溢出
		return false;
	s->top++;
	s->data[s->top]=e;
	return true;
}

bool Pop(SqStack *&s,ElemType &e)
{
	if (s->top==-1)		//栈为空的情况,即栈下溢出
		return false;
	e=s->data[s->top];
	s->top--;
	return true;
} 

bool GetTop(SqStack *s,ElemType &e)
{
	if (s->top==-1) 		//栈为空的情况,即栈下溢出
		return false;
	e=s->data[s->top];
	return true;
}




exp3-1.cpp

#include"sqstack.cpp"
int main()
{	
	ElemType e;
	SqStack *s;
	char ch[5]={'a','b', 'c','d','e'};
	int i=0;
	int length =5;
	printf("\n");
	printf(" (1)初始化栈\n");
	InitStack(s);
	printf(" (2)栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf(" (3)依次进栈元素a,b,c,d,e\n");
	while(i<length)
	{	Push(s,ch[i]);
		i++;
		}	
		
	printf(" (4)栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf(" (5)出栈序列:");
	while(!(StackEmpty(s)))
	{
		Pop(s,e);
		printf(" %c ",e);
	}
	printf("\n");
	printf(" (6)栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf(" (7)销毁栈\n");
	DestroyStack(s);
	
}
           

运行截图:

3.1实现顺序栈的各种基本运算