数据结构——顺序栈(类C代码实现)

数据结构——顺序栈(类C代码实现)

本人为在读本科大学生,能力有限。
如有错误,请联系我更正(QQ:2169788850)或在评论区留言。
代码配合严蔚敏——数据结构(c语言版)和王卓老师网课编写,完全免费,仅供学习交流使用。
由于使用教材严蔚敏——数据结构(c语言版)中的代码为类C伪代码,并不直观,本系列旨在将所有代码在电脑上实现。

使用说明

宏定义部分保存为 “hong_define.h”
其余各部分可放在“sqstack.cpp” 切记切记切记后缀是 .cpp

宏定义

#include<stdio.h> 
#include<stdlib.h>

#define TRUE 1
#define FALSE 0
#define  OK 1
#define  ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

typedef int Status;
typedef int ElemType;

顺序栈的定义

//顺序栈 
#include "hong_define.h"

#define MAXSIZE 100
typedef struct{
	ElemType *base;
	ElemType *top;
	int stacksize;
}sqstack;

顺序栈的初始化

Status inistack(sqstack &s){
	s.base =(ElemType*)malloc(MAXSIZE * sizeof(ElemType));
	if(!s.base) exit (OVERFLOW);
	s.top = s.base;
	s.stacksize = MAXSIZE;
	return OK;
}

判断顺序栈是否为空

Status isempty(sqstack s){
	if(s.top == s.base )
	{
		printf("栈为空\n");
		return TRUE;
	}
	else{
		return FALSE;
	}
}

顺序栈的销毁

Status destroystack(sqstack s){
	if(s.base){
		free(s.base);
		s.stacksize =0;
		s.base =s.top = NULL;
	}
	return OK;
}

顺序栈的清空

Status clearstack(sqstack s){
	if(s.base){
		s.top = s.base;
		return OK;
	}
	return ERROR; 	
} 

顺序栈的长度

int stacklength(sqstack s){
	int length = s.top - s.base;
	printf("栈的元素个数有%d个\n",length);
	return length;
}

获取栈顶元素

Status gettop(sqstack s,ElemType &e){
	if(s.top == s.base){
		printf("栈为空\n");
		return ERROR;
	}
	e = *s.top;
	printf("栈顶元素是%d\n",e);
}

栈的遍历

Status trlsqstack(sqstack s) {
	ElemType e;
	for(int i=0;s.top > s.base;i++){
		e = *(s.top-1); //取值时因为top实际指向栈顶上一位置,所以要减一操作 
		printf("栈的第%d个元素是%d\n",i + 1,e);
		s.top--; 
	}
	return OK;	
}

入栈

Status pushstack(sqstack &s,ElemType e){
	if(s.top - s.base ==s.stacksize){
		printf("当前栈已满,入栈失败\n");
		return ERROR; 
	}
	*s.top = e;
	s.top++;  //top实际指向栈顶的上一位置 
	return OK; 
}

出栈

Status popstack(sqstack &s,ElemType &e){
	if(s.top == s.base){
		printf("栈为空\n");
		return ERROR;
	}
	--s.top;
	e = *s.top;
	printf("出栈元素是%d\n",e);
	return OK;
}

具体实例

int main(){
	sqstack s;
	inistack(s);
	stacklength(s);
	isempty(s);
	pushstack(s,1);
	pushstack(s,2);
	pushstack(s,3);
	pushstack(s,4);
	trlsqstack(s);
	stacklength(s);
	return 0;
}

运行图片

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值