数据结构(c语言)--栈的学习

本文深入讲解了栈数据结构的概念,特点及其操作,包括初始化、判空、判满、入栈、出栈和取栈顶元素等基本操作。并提供了顺序栈的C语言实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义:作为一种限定性线性表,是将线性表的 插入和删除运算限制为仅在表的一端进行。 表中允许进行插入、删除操作的一端称为 栈顶 (Top),表的另一端被称为栈底 (Bottom)。

当栈中没有元素时称为空栈。 栈的插入操作称为进栈或入栈。 栈的删除操作称为出栈或退栈。

特点:后进先出(LIFO)

 

栈主要包括两种:

① 顺序栈 用顺序存储结构实现的栈,即利用一组地址 连续的存储单元依次存放自栈底到栈顶的数据元 素,同时由于栈的操作的特殊性,还必须附设一 个位置指针top(栈顶指针)来动态地指示栈顶元 素在顺序栈中的位置。 通常以top = -1表示空栈。

顺序栈的基本操作

  (1)InitStack(S)初始化:初始化一个新的栈。

  (2)Empty(S)栈的非空判断:若栈S不空,则返回TRUE;否则,返回 FALSE。

  (3)Push(S,x)入栈:在栈S的顶部插入元素x,若栈满,则返回 FALSE;否则,返回TRUE。

  (4)Pop(S)出栈:若栈S不空,则返回栈顶元素,并从栈顶中删除该元 素;否则,返回空元素NULL。

  (5)GetTop(S)取栈顶元素:若栈S不空,则返回栈顶元素;否则返回 空元素NULL。

  (6)SetEmpty(S)置栈空操作:置栈S为空栈。



顺序栈的C语言描述

#define Stack_Size 50
typedef struct
{
 StackElementType elem[Stack_Size];
 int top;
}SeqStack;

顺序栈的基本操作:

① 初始化

void InitStack(SeqStack *S) { S->top= -1; } 

②判栈空

int IsEmpty(SeqStack *S)
{
 return(S->top==-1?TRUE:FALSE);
}

③判栈满

int IsFull(SeqStack *S)
{
 return(S->top== Stack_Size?TRUE:FALSE);
}

④ 进栈

int Push(SeqStack * S, StackElementType x)
{
 if(S->top== Stack_Size)
 return(FALSE);
 S->top++;
 S->elem[S->top]=x;
 return(TRUE);
}

⑤出栈 

int Pop(SeqStack * S, StackElementType *x)
{
 if(S->top==-1)
 return(FALSE);
 else
 {
 *x= S->elem[S->top];
 S->top--;
 return(TRUE);
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值