数据结构算法学习--stack实现

本文介绍了栈这种数据结构的基本概念,包括栈顶、栈底、空栈等,并详细阐述了栈作为后进先出(LIFO)线性表的特点。此外,还提供了栈的顺序存储结构实现代码,包括初始化栈、判断栈是否为空、入栈和出栈等基本操作。
摘要由CSDN通过智能技术生成

1 栈(stack)是限定尽在表尾进行插入和删除操作的线性表。
2 栈中允许插入和删除的一端称为栈顶(top),另一端称为栈底(buttom),不含任何数据元素的栈称为空栈(empty)。
3 栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。
4 栈的插入操作,叫进栈,也称压栈、入栈。
5 栈的删除操作,叫出栈,也又叫作弹栈。
栈的图例:
这里写图片描述

栈顺序存储结构代码的实现:

#include <stdio.h>

const int MAXSIZE = 10; //stack size

//stack struction
typedef struct {
    int data[MAXSIZE];
    int top; //stack size, empty stack top=-1
}Stack;

//initialize stack
bool initStack(Stack **s){
    *s = new Stack;
    (*s)->top = -1; //empty stack top=-1
    return true;
}

//initialize stack
Stack* initStack(){
    Stack *s = new Stack;
    s->top = -1;
    return s;
}

//empty stack
bool emptyStack(Stack *s)
{
    return (-1 == s->top);
}

//push stack
bool Push(Stack *s, int value){
    if(NULL == s) return false;
    if(MAXSIZE <= s->top + 1) return false;
    ++(s->top);
    s->data[s->top] = value;
    return true;
}

//pop stack
bool Pop(Stack *s, int *value){
    if(NULL == s) return false;
    if(0 > s->top) return false;
    *value = s->data[s->top--];
    return true; 
}

//test stack
void testStack(){
    int i = 0;
    //Stack *s = NULL;
    //initStack(&s); or 
    Stack* s = initStack(); 
    while(true){
        if(!Push(s, i)) break;
        ++i;
    }
    while(true){
        if(!Pop(s, &i)) break;
        printf("%d ", i);
    }
    printf("\n");

    if(emptyStack(s)){
        printf("Empty Stack!\n");
    }
    return ;
}

int main(int argc, char *argv[])
{
    testStack();
}

参考资料:《大话数据结构》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值