栈的基本操作
本文最后更新于165 天前,其中的信息可能已经过时,如有错误请发送邮件到nullaura@outlook.com
#include <string.h>
#include <ctype.h>
// #include<malloc.h>      // malloc( )等
#include <limits.h> // INT_MAX等
#include <stdio.h>  // NULL等
#include <stdlib.h> // atoi( ), exit( )
// #include<io.h>          // eof( )
#include <math.h> // floor( ), ceil( ), abs( ), OVERFLOW宏定义,其值为3。

// 函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW 3

typedef int Status;
typedef int SElemType;

#define STACK_INIT_SIZE 5 // 存储空间初始分配量
#define STACKINCREMENT 2  // 存储空间分配增量
typedef struct
{
    SElemType *base; // 存储空间基址
    SElemType *top;  // 栈顶指针
    int stacksize;   // 当前已分配的存储空间,以元素为单位
} SqStack;

//构造空栈
void InitStack(SqStack &S)
{
    // 构造一个空栈S。
    S.base = (SElemType *)malloc(100 * sizeof(SElemType));
    if (!S.base)
        exit(OVERFLOW);
    S.top = S.base;
    S.stacksize = 0;
}

//销毁栈S
void DestroyStack(SqStack &S)
{ // 销毁栈S,S不再存在
    free(S.base);
    S.base = NULL;
    S.top = NULL;
    S.stacksize = 0;
}

//清空栈
void ClearStack(SqStack &S)
{   // 把S置为空栈
    S.top = S.base;
    S.stacksize = 0;
}

//判断栈是否为空
Status StackEmpty(SqStack S)
{   // 若栈S为空栈,则返回TRUE;否则返回FALSE
    return S.top == S.base ? TRUE : FALSE;
}

//计算栈元素的个数
int StackLength(SqStack S)
{   // 返回栈S的元素个数,即栈的长度
    return S.stacksize;
}

//获取栈顶元素
Status GetTop(SqStack S, SElemType &e) // 在教科书第47页
{                                      // 若栈S不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
                                
    if (S.top == S.base)
        return ERROR;
    e = *(S.top - 1);
    return OK;
}

//元素进栈
Status Push(SqStack &S, SElemType e)
{   // 插入元素e为栈S新的栈顶元素。
    if (S.stacksize >= 100)
        return ERROR;
    *(S.top++) = e;
    S.stacksize++;
    return OK;
}

//元素出栈
Status Pop(SqStack &S, SElemType &e)
{   // 若栈S不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
    if (S.top == S.base)
        return ERROR;
    e = *(--S.top);
    S.stacksize--;
    return OK;
}
//遍历栈
Status StackTraverse(SqStack S, void (*visit)(SElemType))
{ // 从栈底到栈顶依次对栈中每个元素调用函数visit()
    while (S.top > S.base)
        visit(*S.base++);
    printf("\n");
    return OK;
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇