数据结构—顺序栈的基本功能实现

数据结构—顺序栈的基本功能实现

  • 栈是仅限在表尾进行插入或删除操作的线性表。栈中有栈底(表头端)和栈顶(表尾端),栈又被称为后进先出线性表(LIFO结构)。
  • 当top=base时,栈为空。
  • 每当一个元素进栈时,top指针加1;每当一个元素出栈时,栈顶元素减1。即非空栈中的栈顶指针始终在栈顶元素的下一个位置上。
  • 下面是顺序栈的代码实现
#include <iostream>
#include <cstdio>
#include <cstdlib>

using namespace std;

#define STACK_INIT_SIZE 100   //栈的初始化容量 
#define STACK_INC_SIZE 10	  //栈的分配增量 

typedef int elemType;

//栈的数据结构
typedef struct{
	elemType* base;  //栈底指针 
	elemType* top;	//栈顶指针 
	int stackSize;	//当前已分配的栈总存储空间 
}SqStack; 

void initStack(SqStack& S);  		 //构造空栈并初始化 
void pushStack(SqStack& S,elemType data); //数据元素进栈
void popStack(SqStack& S);  		 //数据元素出栈 

void initStack(SqStack& S)
{ 
	S.base=(elemType*)malloc(STACK_INIT_SIZE * sizeof(elemType));
	if(!S.base)  exit(1);
	S.top=S.base;
	S.stackSize=STACK_INIT_SIZE;  
} 

void pushStack(SqStack& S,elemType data)
{
	if(S.top-S.base>=S.stackSize) //栈满,扩充容量 
	{
		S.base=(elemType*)realloc(S.base,(S.stackSize+STACK_INC_SIZE) * sizeof(elemType));
		if(!S.base)  exit(1);
		S.top=S.base+S.stackSize; //栈顶改变
		S.stackSize+=STACK_INC_SIZE;
	}
	*S.top=data;
	cout<<"进栈:"<<*S.top;
	S.top++;
	cout<<endl;
}

void popStack(SqStack& S)
{
	if(S.top!=S.base)
	{
		cout<<"出栈:"<<*(S.top-1); 
		S.top--;
	} 
	cout<<endl;
}

void printStack(SqStack& S)
{
	cout<<"栈中的内容为:";
	for(elemType* i=S.base;i<S.top;i++)
	{
		int j=0;
		cout<<*(i+j)<<"  "; 
		j++;
	}
	cout<<endl;
}

int main()
{
	SqStack S;     //定义栈S 
	initStack(S);  //初始化栈S 
	pushStack(S,1);
	pushStack(S,2);
	pushStack(S,3);
	pushStack(S,4);
	printStack(S);
	popStack(S);
	printStack(S);
	return 0;
}

运行结果:
/

发布了77 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42932834/article/details/91048409