C/C++实现顺序栈、链栈及其操作

本文介绍了栈的基本概念,包括其后进先出的特点,并详细讲解了如何使用C/C++实现顺序栈和链栈。分别讨论了顺序栈的结构定义、初始化、获取栈顶元素、压栈、出栈和获取栈中元素个数的操作,以及链栈的定义、初始化和压栈、出栈操作。
摘要由CSDN通过智能技术生成


[ 2020年7月7号]

1.栈的基本概念

  • 定义:栈式限定仅在表尾惊醒插入和删除操作的线性表。
  • 特点:后进先出(Last In First Out)
  • 栈的抽象数据类型
ADT stack
Data
	同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系
Operation
	InitStack(&S): 初始化,建立一个空栈
	DestorStack(&S): 销毁栈
	ClearStack(&S): 将栈清空
	StackEmpty(&S): 判断栈是否为空栈
	GetTop(S,*e): 获取栈顶元素
	Push(&S,*e): 进栈
	Pop(&S,*e): 出栈
	StackLength(S): 返回栈S的元素个数

2.栈的顺序存储

  • 顺序栈的结构定义代码
const int STACK_INIT_SIZE = 20;
const int OVERFLOW = -2;
typedef int SElemType;
typedef struct
{
	SElmeType *base;//栈底指针
	SElemType *top;//栈顶指针
	int stacksize;//栈的大小
}SqStack;
  • 栈的初始化
void InitStack(SqStack &S)
{
	S.base = new SElemType[STACK_INIT_SIZE];//动态分配存储空间
	if(!S.base) exit(OVERFLOW);
	S.top = S.base;
	S.stacksize = STACK_INIT_SIZE;
}
  • 获取栈顶元素
void GetTop(SqStack &S,SElemType *e)
{
	if(S.top == S.base) return;//空栈
	*e = *(S.top - 1);
}
  • 压栈操作
void Push(SqStack &S,SElemType e)
{
	if(S.top - S.base >= S.stacksize) return;//满栈
	*(S.top) = e;
	S.top += 1;
}
  • 出栈操作
void Pop(SqStack &S,SElemType *e)
{
	if(S.top == S.base) return;//空栈
	*e = *(S.top);
	S.top--;
}
  • 获取栈中元素个数
int StackLength(S)
{
	int length = S.top - S.base;
    return length;
}

3.栈的链式存储

  • 链栈的定义代码
typedef struct StackNode
{
	SelemType data;
	struct StackNode *next;
}StackNode,*LinkStack;
  • 链栈的初始化
void InitStack(LinkStack &S)
{
	S = new StackNode;
	S->next = NULL;
}
  • 压栈操作
void Push(LinkStack &S,SElemType e)
{
    LinkStack p;
    InitStack(p);
    p->data = e;
    p->next = S;
    S = p;
}
  • 出栈操作
void Pop(LinkStack &S,SElemType *e)
{
	LinkStack p;
	if(S->next = NULL) return;
	p = S;
	*e = *(S->data);
	S = p->next;
	delete p;
}

    本人也还在学习中,若有错误或不足请指教,互相学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值