`
king_tt
  • 浏览: 2083095 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【数据结构】顺序栈_Stack

 
阅读更多
#include "stdio.h"    
#include "stdlib.h"   
#include "io.h"  
#include "math.h"  
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */

typedef int Status; 
typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int */

/* 顺序栈结构 */
typedef struct
{
        SElemType data[MAXSIZE];
        int top; /* 用于栈顶指针 */
}SqStack;

Status visit(SElemType c)
{
        printf("%d ",c);
        return OK;
}

/*  构造一个空栈S */
Status InitStack(SqStack *S)
{ 
        /* S.data=(SElemType *)malloc(MAXSIZE*sizeof(SElemType)); */
        S->top=-1;
        return OK;
}

/* 把S置为空栈 */
Status ClearStack(SqStack *S)
{ 
        S->top=-1;
        return OK;
}

/* 若栈S为空栈,则返回TRUE,否则返回FALSE */
Status StackEmpty(SqStack S)
{ 
        if (S.top==-1)
                return TRUE;
        else
                return FALSE;
}

/* 返回S的元素个数,即栈的长度 */
int StackLength(SqStack S)
{ 
        return S.top+1;
}

/* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */
Status GetTop(SqStack S,SElemType *e)
{
        if (S.top==-1)
                return ERROR;
        else
                *e=S.data[S.top];
        return OK;
}

/* 插入元素e为新的栈顶元素 */
Status Push(SqStack *S,SElemType e)
{
        if(S->top == MAXSIZE -1) /* 栈满 */
        {
                return ERROR;
        }
        S->top++;				/* 栈顶指针增加一 */
        S->data[S->top]=e;  /* 将新插入元素赋值给栈顶空间 */
        return OK;
}

/* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */
Status Pop(SqStack *S,SElemType *e)
{ 
        if(S->top==-1)
                return ERROR;
        *e=S->data[S->top];	/* 将要删除的栈顶元素赋值给e */
        S->top--;				/* 栈顶指针减一 */
        return OK;
}

/* 从栈底到栈顶依次对栈中每个元素显示 */
Status StackTraverse(SqStack S)
{
        int i;
        i=0;
        while(i<=S.top)
        {
                visit(S.data[i++]);
        }
        printf("\n");
        return OK;
}

int main()
{
        int j;
        SqStack s;
        int e;
        if(InitStack(&s)==OK)
                for(j=1;j<=10;j++)
                        Push(&s,j);
        printf("栈中元素依次为:");
        StackTraverse(s);
        Pop(&s,&e);
        printf("弹出的栈顶元素 e=%d\n",e);
        printf("栈空否:%d(1:空 0:否)\n",StackEmpty(s));
        GetTop(s,&e);
        printf("栈顶元素 e=%d 栈的长度为%d\n",e,StackLength(s));
        ClearStack(&s);
        printf("清空栈后,栈空否:%d(1:空 0:否)\n",StackEmpty(s));
        
        return 0;
}


分享到:
评论

相关推荐

    数据结构顺序栈验证实验报告.pdf

    数据结构实验报告 顺序栈操作验证(参考) 专业: 学号: 姓名: 一、顺序栈操作验证 1. 实验目的 掌握栈的顺序存储结构; 验证栈的操作特性; 掌握栈的基本操作实现方法。 2. 实验内容 建立含有若干个元素的顺序栈...

    stack_栈_数据结构C_molecularwfy_

    顺序栈基本操作的实现 链栈基本操作的实现

    数据结构顺序栈

    S stacksize STACK INIT SIZE; return OK; } Status a SqStack &amp;S "&gt;#include&lt;stdio h&gt; #include&lt;stdlib h&gt; #define STACK INIT SIZE 5 #define STACKINCREMENT 3 #define OVERFLOW 2 #define OK ...

    数据结构实验6-栈

    实现基于顺序表的顺序栈(数据结构定义+基本运算) 设计算法判断一个算术表达式的圆括号是否正确配对。  第一个式子: 1*(2+3*(4*(2-1)*(3+x)+5)-6) 能够正确匹配  第二个式子: 1*(2+3*4*(2-1)*(3+x)+5)-6) 不...

    c++数据结构--顺序栈

    vs2010环境c++实现顺序栈 typedef shuZuStack *Head,stack;//shuZuStack 可用*Head,stack代替

    c语言-通过使用数据结构来实现顺序栈的使用

    顺序栈(Sequential Stack)是一种使用数组实现的栈结构。它具有先进后出(Last In, First Out,LIFO)的特点,即最后入栈的元素首先出栈。 顺序栈中的元素按照入栈的顺序存储在数组中,并且通过一个指针来记录栈顶...

    C语言通过使用数据结构来实现双向顺序栈

    双向顺序栈(Double-ended sequential stack)是一种栈数据结构,它允许在两个方向上进行入栈和出栈操作。与常规栈不同,双向顺序栈具有两个栈顶位置,一个在栈的一端,称为"头栈顶"(head),另一个在栈的另一端,...

    JS中的算法与数据结构之栈(Stack)实例详解

    本文实例讲述了JS中的算法与数据结构之栈(Stack)。分享给大家供大家参考,具体如下: 栈(Stack) 上一篇我们说到了列表,它是一种最自然的数据组织方式,如果对数据的存储顺序要求不重要,那么列表就是一种非常适合的...

    数据结构——利用 Stack类 为其设计外部函数 delete_all功能

    void delete_all(Stack&lt;T&gt; &s, const T &x)——删除栈s中所有等于x的数据项,保持其他数据项顺序不变。 输入:input.txt,其第一个字符为x,其后按栈底到栈顶的顺序依次给出栈中字符,字符间用空格、回车或制表符...

    顺序栈(Sq-Stack)

    顺序栈代码,参考我的博客:https://blog.csdn.net/weixin_45571585/article/details/127801662?spm=1001.2014.3001.5502

    [详细完整版]数据结构习题.pdf

    判断一个顺序栈 ST(元素个数最多为 StackSize)为空的条件是__A_ A. ST.top==-1 B. ST.top!==-1 C. ST.top!==StackSize D. ST.top==StackSize 6. 表达式 a*(b+c)-d 的后缀表达式是_abc+*b--___ 7.经过以下队列运算后,...

    数据结构 简单的栈

    cout顺序栈"; for(int i=t;i&gt;=0;i--) cout[i]; cout; return 0; } stack:: ~stack() { cout已撤销"; } int main() { stack s; s.push(1); s.push(2); s.push(3); s.push(4); s.push(5); s.push(6); s....

    表达式求值顺序栈实现包括小数点运算(C语言版).docx

    使用两个栈,stack0用于存储操作数,stack1用于存储操作符 从左往右扫描,遇到操作数入栈stack0 遇到操作符时,如果优先级低于或等于栈顶操作符优先级,则从stack0弹出两个元素进行计算,并压入stack0,继续与栈顶...

    数据结构表达式求值.docx

    void InitStack(Stack_char*S)//初始化顺序栈 { S-&gt;top=-1; } int Push(Stack_char *S,char x)//进栈 { if(S-&gt;top==Stack_Size-1) return (FALSE); S-&gt;top++; S-&gt;elem[S-&gt;top]=x; return (TRUE); } int Pop(Stack_...

    数据结构C严蔚敏版_全注释源码_线性表队列栈监视哨查找折半直接插入排序冒泡快速选择

    数据结构及算法C语言版。严蔚敏版。VC6运行通过,这个是源代码CPP文件,包含顺序线性表、单链表的插入、删除、查找。包含监视哨查找,折半查找,直接插入排序,希尔排序,冒泡排序,快速排序,选择排序。里面包含超...

    数据结构课程设计 表达式计算

    此处采用的顺序栈结构如下: #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef strict{ SElemType *base; SElemType *top; int stacksize;}SqStack; 。。。。。。。。。。。。。。。

    Queue_栈队列_pop_

    任务描述栈和队列都提供 Push/Pop 两... 输出描述对每组测试数据输出一行, 输出该组数据对应的线性结构,若为栈则输出”Stack”,若为队列则输出“Queue”,若两者都是则输出“Both”,若两者都不是则输出“Error”。

    数据结构:图解链表,用链表实现栈(c语言版)

    数据结构:图解链表,用链表实现栈(c语言版) 栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶(top),表头端称为栈低(bottom)。不含元素的空表称为空栈。因为栈限定在表尾进行...

    数据结构课程设计--迷你计算器设计

    通过该题目的设计过程,可以加深理解线性表及栈的逻辑结构、存储结构,掌握线性表及栈上基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养学生的动手能力...

    数据结构-栈代码.doc

    栈——代码实现 //定义顺序表: #include &lt;stdio.h&gt; #define MAXLEN 10 typedef int ElementType; typedef struct { ElementType data[MAXLEN]; int top; }SqStack; //建空栈 SqStack InitStack() { SqStack s; s....

Global site tag (gtag.js) - Google Analytics