• 栈的顺序存储


    想起童年最喜欢做的事就是弹溜溜,经常和小伙伴们玩输赢的,你赢了给你,你输了给我,也喜欢把溜溜放进饮料瓶里,用清水进行清洗,但是每次将第一个溜溜放进瓶子里,但洗完后,往往最后一个出来,其实这就是一个栈的操作,先进后出或后进先出,那咱们用C实现一下吧!

    首先看看它需要什么库函数和基础的定义

    #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;
    }

    接下来咱们就可以构造一个空栈

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

    将栈设置为一个空栈

    Status ClearStack(SqStack *S)
    { 
            S->top=-1;
            return OK;
    }

    判断栈是否为空

    Status StackEmpty(SqStack S)
    { 
            if (S.top==-1)
                    return TRUE;
            else
                    return FALSE;
    }

    查看一下栈的长度

    int StackLength(SqStack S)
    { 
            return S.top+1;
    }

    若栈不为空的话,打印栈的栈顶元素

    Status GetTop(SqStack S,SElemType *e)
    {
            if (S.top==-1)
                    return ERROR;
            else
                    *e=S.data[S.top];
            return OK;
    }

    将元素入栈

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

    出栈操作

    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("
    ");
            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
    ",e);
            printf("栈空否:%d(1:空 0:否)
    ",StackEmpty(s));
            GetTop(s,&e);
            printf("栈顶元素 e=%d 栈的长度为%d
    ",e,StackLength(s));
            ClearStack(&s);
            printf("清空栈后,栈空否:%d(1:空 0:否)
    ",StackEmpty(s));
            
            return 0;
    }
  • 相关阅读:
    CentOS 安装 Xamarin官方Mono
    mongo命令行下去除重复的数据
    通过前端js将页面表格导出为PDF(二)
    通过前端js将页面表格导出为PDF(一)
    ubuntu下手动安装MongoDB
    在django项目下执行定时任务
    django+uwsgi+nginx部署在ubuntu系统上
    Nginx(三)
    Nginx(二)
    Nginx(一)
  • 原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/10819725.html
Copyright © 2020-2023  润新知