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

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();
}

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

猜你喜欢

转载自blog.csdn.net/feng973/article/details/79420336