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

定义:作为一种限定性线性表,是将线性表的 插入和删除运算限制为仅在表的一端进行。 表中允许进行插入、删除操作的一端称为 栈顶 (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);
 }
}

猜你喜欢

转载自blog.csdn.net/iostream992/article/details/81188660