栈的基本操作

来源:互联网 发布:战舰世界 数据更新出错 编辑:程序博客网 时间:2024/06/03 10:51

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。栈是一种很重要的数据结构。我们可以实现栈的基本操作,比如创建栈,出栈,入栈等。先看一下原理图吧:
这里写图片描述
这里写图片描述

以下是栈的实现方式:

#include <stdio.h>#include <malloc.h>#define OK 1#define ERROR 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int ElemType;typedef int Status;typedef struct {    ElemType *base;  //栈底指针    ElemType *top;   //栈顶指针    int stacksize;} SqStack;/**初始化栈*/Status initStack(SqStack &s) {    s.base = (ElemType) malloc(STACK_INIT_SIZE * sizeof(ElemType)); //申请空间    if (!s.base) return ERROR;    s.top = s.base;  //栈顶指针和栈底指针指向同一地址,表示栈为空    s.stacksize = STACK_INIT_SIZE;   //初始化栈大小    return OK;}/**获取栈顶元素*/Status getTop(SqStack &s, ElemType &e) {    if (s.top == s.base) return ERROR;    e = *(s.top - 1);    return OK;}/**出栈*/Status pop(SqStack &s, ElemType &e) {    if (s.top == s.base) return ERROR;    e = *(--s.top);  //出栈,top指针下移    return OK;}/*、*入栈*/Status push(SqStack &s, ElemType &e) {    if (s.top - s.base >= s.stacksize) {  //空间不够,申请增加空间        s.base = (ElemType) realloc(s.base, (s.stacksize + STACKINCREMENT) * sizeof(ElemType));        if (!s.base) return ERROR;        s.stacksize += STACKINCREMENT;        s.top = s.base + s.stacksize;    }    *s.top ++ = e;  //入栈,top指针上移    return OK;}
2 0
原创粉丝点击