栈的顺序实现

栈的顺序实现
时间:2006/03/27
测试环境: TC2.0

#include <stdio.h>
#define True 1
#define False 0
#define LEN sizeof(ElemType)
#define Stack_InitSize 100
#define Stack_Increment 30

typedef int ElemType;

struct SqStack
{
    ElemType *base;
    ElemType *top;
    int stacksize;
};

/*构造一个空栈*/
void InitStack(struct SqStack *S)
{
    S->base = (ElemType *)malloc(Stack_InitSize*LEN);
    if(!S->base)
        return;
    S->top = S->base;
    S->stacksize = Stack_InitSize;
    return;
}

/*销毁一个栈*/
void DestroyStack(struct SqStack *S)
{
    while(S->top!=S->base)
        S->top--;
    free(S->base);
    free(S);
}

/*将栈里面的元素清空*/
void ClearStack(struct SqStack *S)
{
    while(S->top!=S->base)
        S->top--;
}

/*判断是否为空栈*/
void IsEmpty(struct SqStack *S)
{
    if(S->top==S->base)
        printf("/nThe SqStack is empty!");
    else
        printf("/nThe SqStack is not empty!");
    return;
}

/*按出栈顺序打印这个栈*/
void Print(struct SqStack *S)
{
    ElemType *p;
    p = S->top;
    while(p!=S->base)
    {
        p--;
        printf("%d ",*p);
    }
    printf("/n");
    p=NULL;
}

/*向栈里压入数据e*/
void Push(struct SqStack *S,ElemType e)
{
    if(S->top - S->base >= S->stacksize) /*栈满,重新分配更大的空间*/
    {
        S->base = (ElemType *)realloc(S->base,(S->stacksize+Stack_Increment)*LEN);
        S->top = S->base + S->stacksize;
        S->stacksize += Stack_Increment;
    }
    *S->top = e;
    S->top++;
    return;
}

/*弹出栈顶元素*/
void Pop(struct SqStack *S)
{
    if(S->top==S->base)
        return;
    S->top--;
    printf("Pop the data:%d/n",*S->top);
    return;
}

/*返回栈顶元素*/
int GetTop(struct SqStack *S)
{
    ElemType *p = S->top;
    if(S->top==S->base)
    {
        printf("The stack is empty!");
        return False;
    }
    return *(--p);
}

void main()
{
    struct SqStack *SS;
    int i;
    SS = NULL;
    /*初始化这个栈*/
    InitStack(SS);
    /*将数据压入栈内*/
    for(i=0;i<10;i++)
        Push(SS,i);
    /*以出栈顺序打印栈*/
    Print(SS);
    printf("/n");
    /*弹出栈顶元素,并再次打印栈*/
    Pop(SS);
    Pop(SS);
    Print(SS);
    /*返回栈顶元素*/
    i = GetTop(SS);
    printf("/nThe Top data is:%d/n",i);
    /*清空栈,并判断是否为空*/
    ClearStack(SS);
    IsEmpty(SS);
    /*销毁栈*/
    DestroyStack(SS);
}
时间: 2024-12-07 19:12:31

栈的顺序实现的相关文章

Java数据结构-线性表之栈(顺序栈和链栈)

栈的定义:(特殊的线性表) ??仅在表的一端进行插入和删除的线性表.允许插入.删除的这一端称为栈顶,另一端称为栈底.表中没有元素时称为空栈. ??被称为后进先出的线性表(Last In First Out),简称 LIFO表,或被称为先进后出的线性表(First In Last Out),简称 FILO表. ??栈更具存储方式的不同分为两种:顺序栈和链栈. 顺序栈: 和顺序表一样,顺序栈也采用数组来存放数据元素: 为了保证栈底位置的不变,采用数组下标为0的位置作为顺序栈的栈底. 而栈顶指针的最大

算法之 栈的顺序结构

package bin; import java.util.ArrayList; import java.util.List; import org.omg.CORBA.SystemException; /** * @author bin * target 实现栈的顺序结构 * 摘要:栈 栈顶 栈底 LIFO 结构 last In First Out */ public class Bin_stack { private int StackSize; private int current; p

可能出栈的顺序

假设栈的输入序列为1234,判断以下4123,2431是否合法. 针对2431: 先让1进队,再让2进队列,让2弹出,让3入,让4入,最后依次弹出,则结果就是2431 针对4123: 要让4出队,必须先让123都入队,那么4接下来的出队顺序就应该是3,而不是1,所以错误. 注: 1.必须保存入队的顺序不变 2.在入队的同时也可以出队 3.由于是栈,那么必须保证是先进后出,所以我们一般先根据结果中的第一个弹出的数字,确定大概的入队的方式,就可以判断是否合法. 可能出栈的顺序

[C++]数据结构:栈之顺序栈

0 栈的基本概念 栈,根据存储结构的不同,可分为:链栈和顺序栈. 1 顺序栈的知识概览 2 编程复现 2.1 定义基本数据结构 typedef char DataType; // 基本数据类型 enum Status { ERROR, OK, OVERFLOW };// 状态(码) : 枚举类型 #define MAXSIZE_STACK 100 //栈内最大元素数 typedef struct { // 顺序栈 DataType *base; // 栈底指针 (NULL:栈结构不存在:[重点]

c++实现两个元素进栈和出栈的顺序

1.在数据结构的书中大多是伪代码,没有给出一个完整的程序,在此小编给大家一个完整的简单的入栈出栈操作. 2.实现的功能是:观察两个数的入栈和出栈顺序. 3.程序和代码: #include<iostream> #include<stdlib.h> using namespace std; struct Stack{ int* base; int top; int stack_size; }; int IniStack(Stack &s,int size){ s.base=(i

[数据结构]栈之顺序栈的类模板实现

栈的数组实现形式,采用动态分配数组,不够时可以调整栈的大小. Stack.h文件:主要定义栈的抽象基类,提供公共的接口函数. #ifndef STACK #define STACK //栈的抽象基类 template<class T> class Stack { public: Stack(){} ~Stack(){} virtual void Push(const T& x)=0; virtual bool Pop(T& x)=0; virtual bool getTop(T

Java栈之顺序栈存储结构实现

一.栈的基本定义 栈是一种数据结构,它代表一种特殊的线性表,这种线性表只能在固定一端(通常认为是线性表的尾端)进行插入.删除操作的特殊线性表,通常就是在线性表的尾端进行插入.删除操作. 二.顺序栈的实现 顺序栈是利用一组地址连续的存储单元依次存放从栈底到栈顶的数据元素,栈底位置固定不变,它的栈顶元素可以直接通过顺序栈底层数组的数组元素arr[size - 1]来访问. 1 package com.ietree.basic.datastructure.stack; 2 3 import java.

栈:顺序栈和链式堆栈

一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作. 先进后出:堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底.堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈. 备注:栈本身就是一个线性表,所以我们之前讨论过线性表的顺序存储和链式存储,对于栈来说,同样适用. 二.堆栈的抽象数据类型: 数据集合: 堆栈的数据

C语言中函数参数入栈的顺序 - Fangzhen - 博客园

.wiz-todo, .wiz-todo-img {width: 16px; height: 16px; cursor: default; padding: 0 10px 0 2px; vertical-align: -10%;-webkit-user-select: none;} .wiz-todo-label { display: inline-block; padding-top: 7px; padding-bottom: 6px; line-height: 1.5;} .wiz-todo