美文网首页
栈的定义及相关操作

栈的定义及相关操作

作者: Jorunk | 来源:发表于2020-01-18 12:01 被阅读0次
typedef struct
{
    ElemType *base;
    ElemType *top;
    int stackSize;
}sqStack;
  • 这里定义了一个顺序存储的栈,它包含了三个元素:base,top,stackSize。其中base是指向栈底的指针变量,top是指向栈顶的指针变量,stackSize指示栈的当前可使用的最大容量。
-(ElemType* base 和 ElemType* top)
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int top;        // 用于标注栈顶的位置
int stackSize;
}
#define STACK_INIT_SIZE 100
initStack(sqStack *s)
{
    s->base = (ElemType *)malloc( STACK_INIT_SIZE * sizeof(ElemType) );
    if( !s->base )
        exit(0);
    s->top = s->base;   // 最开始,栈顶就是栈底
    s->stackSize = STACK_INIT_SIZE;
}


#define SATCKINCREMENT 10

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 )
            exit(0);

        s->top = s->base + s->stackSize;              // 设置栈顶
        s->stackSize = s->stackSize + STACKINCREMENT; // 设置栈底
    }

    *(s->top) = e;
    s->top++;
}
  • 出栈操作就是在栈顶取出数据,栈顶指针随之下移的操作。
  • 每当从栈内弹出一个数据,栈的当前容量就-1。
Pop(sqStack *s, ElemType *e)
{
    if( s->top == s->base )  // 栈已空空是也
        return;
    *e = *--(s->top);
}

ClearStack(sqStack *s){
s->top = s->base;
}
DestroyStack(sqStack *s){
    int i, len;
    len = s->stackSize;
    for( i=0; i < len; i++ ){
        free( s->base );
        s->base++;
    }
    s->base = s->top = NULL;
    s->stackSize = 0;
}
int StackLen(sqStack s)
{
    return(s.top – s.base);  // 初学者需要重点讲解
}


teypedef struct StackNode
{
    ElemType data;  // 存放栈的数据
    struct StackNode *next;
} StackNode, *LinkStackPtr;
teypedef struct LinkStack
{
    LinkStackPrt top;   // top指针
    int count;      // 栈元素计数器
}

Status Push(LinkStack *s, ElemType e)
{
    LinkStackPtr p = (LinkStackPtr) malloc (sizeof(StackNode));
    p->data = e;
    p->next = s->top;
    s->top = p;
    s->count++;
    return OK;
}

Status Pop(LinkStack *s, ElemType *e)
{
    LinkStackPtr p;
    if( StackEmpty(*s) )  // 判断是否为空栈
        return ERROR;
    *e = s->top->data;
    p = s->top;
    s->top = s->top->next;
    free(p);
    s->count--;
    return OK;
}

相关文章

  • 栈的定义及相关操作

    这里定义了一个顺序存储的栈,它包含了三个元素:base,top,stackSize。其中base是指向栈底的指针变...

  • 数据结构-其他线性结构(栈和队列)

    大纲:*掌握栈的定义、栈的存贮结构及基本操作的实现。理解用栈实现表达式的求值,递归过程及实现。掌握队列的定义、存贮...

  • 栈与队列(一)

    在这篇文章里,我们来实现自定义的链式栈。首先我们来看看链式栈的结构及操作定义。 链式栈结构定义 首先,新建两个文件...

  • 5.栈Stack

    目录:1.栈的定义2.栈的图解3.栈定义操作4.栈的实现 1. 栈的定义 2. 栈的图解 3. "栈"定义的操作 ...

  • C栈(链表实现),及栈相关操作

    一、定义节点以及栈 节点的结构体中由于需要定义struct Node *pnext指针,所以typedef str...

  • 数据结构-栈

    栈的特点 先进后出 栈的相关操作都是通过栈顶位置进行相关操作的 栈的接口抽象 栈可以通过线性表直接实现(链表、数组...

  • 链栈的操作

    链栈的定义 链栈的操作 初始化 判断栈空 入栈 出栈

  • 数据结构-栈(stack)和队列

    比如浏览器的上一步,就是栈的概念,后进先出 栈的插入和删除操作 栈的定义 栈的创建 入栈操作 出栈操作 栈的理解 ...

  • 产品经理学数据分析SPSS篇(2)--基本认知和数据导入

    限于操作截图较多,本篇主要介绍SPSS窗口、数据变量定义、数据导入相关操作。下篇讲解数据清洗及数据处理相关操作。 ...

  • 栈的相关知识与代码实现

    一、栈的相关知识 栈的定义: 是限定仅在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top...

网友评论

      本文标题:栈的定义及相关操作

      本文链接:https://www.haomeiwen.com/subject/coeczctx.html