【数据结构】1.线性结构:堆栈、队列

本文介绍了数据结构中的线性结构——堆栈和队列。堆栈是一种后入先出(LIFO)的数据结构,包括顺序存储和链式存储两种实现方式。队列则遵循先入先出(FIFO)原则,分为顺序队列和链队列。文章详细讲解了堆栈和队列的定义、存储方式及操作方法。
摘要由CSDN通过智能技术生成

一、堆栈

1.什么是堆栈?

1)堆栈是具有一定操作约束的线性表,这个操作约束就是只在栈顶(Top)位置做插入(入栈Push)和删除(出栈Pop)的操作,整个过程是后入先出的(LIFO)。
2)堆栈的抽象数据类型描述:
类型名称:
堆栈(Stack)
数据对象集:0个或多个元素的有穷线性表
操作集:长度MaxSize的堆栈S,堆栈元素item任意数据类型ElementType
Stack CreateStack( int MaxSize ): 生成空堆栈,其最大长度为MaxSize
int IsFull( Stack S, int MaxSize )判断堆栈S是否已满
void Push( Stack S, ElementType item )将元素item压入堆栈
int IsEmpty ( Stack S )判断堆栈S是否为空
ElementType Pop( Stack S )删除并返回栈顶元素
其中最重要的就是压栈和出栈的操作。

2.堆栈的顺序存储

与之前没有操作约束的普通线性表一样,顺序存储采用数组的物理数据结构,相对来说比较简单,注意两种不同的定义方式,一个是静态数组,一个是动态数组:

#include <iostream>
#include <cstdlib>
using namespace std;

#define MaxSize 10
/*程序运行的时候动态创建数组*/
// typedef struct SNode *Stack;
// struct SNode{
   
//     char Data[MaxSize];
//     int Top;
// };
/*编译时确定数组长度*/
typedef struct SNode *Stack;
struct SNode
{
   
    char *Data;
    int Top;
};

Stack CreateStack()
{
   
    Stack S;
    S = (Stack)malloc(sizeof(SNode));
    S->Data = (char *)malloc(MaxSize * sizeof(char));
    S->Top = -1;
    return S;
}

void Push(Stack PtrS, char item)
{
   
    if (PtrS->Top == MaxSize - 1)
    {
   
        cout << "Stack FULL" << endl;
        return;
    }
    else
    {
   
        PtrS->Data[++(PtrS->Top)] = item;
        return;
    }
}

char Pop(Stack PtrS)
{
   
    if (PtrS->Top == -1)
    {
   
        cout << "Stack NULL" << endl;
        return 'N'; 
    }
    else
        return (PtrS->Data[(PtrS->Top)--]);
}
void TraverseStack(Stack S)
{
   
    if (S->Top == -1)
    {
   
        cout << "Stack NULL" << endl;
        return; 
    }
    int i = 0</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值