数据结构 栈的顺序表实现 c语言

这篇博客详细介绍了如何使用C++语言实现基于顺序表限制的栈数据结构。作者通过定义结构体`SqStack`来表示栈,包括栈底指针、栈顶指针和栈长度。栈的操作包括初始化栈、入栈、出栈、获取栈顶元素以及计算栈内元素个数。代码中包含了`InitStack`、`Push`、`Pop`、`GetTop`和`StackLength`等函数的实现,展示了如何动态调整栈的大小以适应元素的增减。
摘要由CSDN通过智能技术生成

参考了 严蔚敏 的 《数据结构》(C语言版)
用的是 顺序表 添加限制实现的 栈
栈就是线性表加上一定的限制。
本篇里的 栈顶指针 指向的是栈顶元素的下一个地址。

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;


#define STACK_INIT_SIZE 100		//初始的栈长 
#define STACKINCREMENT 10		//增加的栈长 

#define SElemType int 			//假定数据类型是int型 
#define Status 	bool

typedef struct{
	SElemType * base;			//地址 
	SElemType * top;			//栈顶指针 
	int stacksize;				//栈长度 
} SqStack; 


//构造一个空栈
Status InitStack(SqStack & S){
	//申请空间,申请失败则返回false
	S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));	
	if(!S.base) return false;
	
	S.top = S.base;
	S.stacksize = STACK_INIT_SIZE;
	return true;
} 

//push 入栈
Status Push(SqStack &S, SElemType e){
	//空间不够则重新申请更大的空间
	if((S.top-S.base)>=S.stacksize){
		S.base = (SElemType * )realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));
		if(!S.base) return false;
		S.top = S.base + S.stacksize; 
	}
		*S.top++ = e;				//因为top在元素之上,所以先赋值后移动指针
		cout<<S.top<<endl;
		cout<<S.base<<endl;
		return true;
} 

//pop 出栈
Status Pop(SqStack & S, SElemType & e){
	if(S.base == S.top)	return  false;		//此时栈里面没有元素
	e = *--S.top;						//此栈的设计是top指向最顶元素的上一个地址 
	return true; 
} 

//GetTop 获得栈顶元素
Status GetTop(SqStack & S, SElemType & e){
	if(S.base == S.top) return false;		//空栈的情况
	e = *(S.top-1);
	return true; 
} 

//获得栈内元素的个数 
int StackLength(SqStack S){
	return S.top - S.base;
} 

 
int main(int argc, char** argv) {
//	SqStack s;
//	InitStack(s);
//	SElemType e; 
//	Push(s, 3);
//	Push(s, 4);
//	cout<<StackLength(s)<<endl;
//	Pop(s,e);
//	cout<<e<<endl;
//	Pop(s,e);
//	cout<<e<<endl;
	
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值