zoukankan      html  css  js  c++  java
  • C 基于数组存储的堆栈实现

    一、堆栈简介

    对于需要管理的队列,主要操作是在序列的末尾插入和取出(删除)元素,有这样操作要求的序列我们称之为堆栈(Stack)。

    堆栈可以认为是具有一定约束的线性表,插入和删除都作用在一个称为栈顶(Top)的位置。日常生活中和也可以看到堆栈的例子,例如对厨房中叠放的盘子来说,使用盘子(删除操作)时从顶端拿走盘子,用完放回(插入操作)时也是放到顶端。

    通常把数据插入称为压入栈(Push),数据取出(删除)叫做弹出栈(Pop)。正是由于最后入栈的元素最先弹出这一特性,堆栈也被称为后入先出(Last In First Out, LIFO)表。

    二、堆栈的抽象数据类型定义及基本操作

    typedef struct SNode* PtrToSNode;
    struct SNode
    {
    	int* Data;//存放堆栈元素的数组
    	int Top;//记录栈顶位置
    	int MaxSize;//记录堆栈长度
    };

    类型名称:堆栈(Stack)。

    数据对象集:一个有0个或多个元素的有穷线性表。

    操作集:对于一个具体长度为正整数MaxSize的堆栈S来说,对堆栈中的任一元素X来说,有以下操作:

    1、PtrToSNode Create(int max):创建一个最大容量为max的空堆栈

    PtrToSNode Create(int max)
    {
    	PtrToSNode s = (PtrToSNode)malloc(sizeof(struct SNode));//开辟堆栈所需要的空间
    	s->Data = (int*)malloc(max * sizeof(int));//开辟存储堆栈数据的数组所需要的空间
    	s->Top = -1;//Top记录当前栈顶元素的下标值,置为-1,说明栈为空
    	s->MaxSize = max;//堆栈的最大容量
    	return s;
    }

    2、bool IsFull(PtrToSNode s):判断堆栈是否已满

    bool IsFull(PtrToSNode s)
    {
    	return (s->Top  == s->MaxSize  - 1);
    }

    3、bool Push(PtrToSNode s, int num):入栈

    bool Push(PtrToSNode s, int num)
    {
    	if (! IsFull(s))
    	{
    		s->Top++;
    		s->Data[s->Top] = num;
    		return true;
    	}
    	else
    	{
    		printf("栈已满!");
    		system("pause");
    		return false;
    	}
    }

    4、bool IsEmpty(PtrToSNode s):判断堆栈是否空

    bool IsEmpty(PtrToSNode s)
    {
    	return (s->Top  == -1);
    }

    5、int Pop(PtrToSNode s):出栈

    int Pop(PtrToSNode s)
    {
    	if (!IsEmpty(s))
    	{
    		int num = s->Data[s->Top];
    		s->Top--;
    		return num;
    	}
    	else
    	{
    		printf("堆栈空!");
    		system("pause");
    		return -1;
    	}
    }
  • 相关阅读:
    Java 窗口 绘制图形 #1
    支配树
    Tarjan算法
    Baby-step giant-step算法
    初等群论
    第七次java作业
    学习所用的开发环境
    第六次java作业
    第五次java作业
    第四次java作业
  • 原文地址:https://www.cnblogs.com/HL-space/p/10546594.html
Copyright © 2011-2022 走看看