顺序栈的表示与实现

快来打我* 2022-06-11 02:00 223阅读 0赞

本文采用C语言,利用结构体来实现顺序栈

  • 用于定义栈的大小,以及再栈满的时候,扩充栈

    define STACK_SIZE 50

    define STACK_INCREMENT 10

  • 采用顺序结构来实现栈,使用的是结构体,以一个结构体来表示栈

    typedef struct {

    1. int stackSize; //栈容量
    2. int *base; //栈底指针
    3. int *top; //栈顶指针

    }SqStack, *pStack;

  • 初始化栈,base和top相当于栈中的索引,Top是栈顶,Base是栈底,传入的参数是结构体指针

    void initStack(pStack p) {

    1. p->base = (int *)malloc(STACK_SIZE * sizeof(int));
    2. if (p->base != NULL)
    3. {
    4. p->top = p->base;
    5. p->stackSize = STACK_SIZE;
    6. }
    7. else
    8. {
    9. printf("分配内存失败");
    10. }

    }

  • 栈判空,通过判断栈顶Top指针和栈底Base指针指向的地址是否相等,栈空返回true,否则返回false

    bool isEmpty(pStack p) {

    1. return p->top == p->base ? true : false;

    }

  • 栈判满,通过栈顶指针的地址与栈底指针的差值与栈初始化的大小进行比较

    bool isFull(pStack p) {

    1. return (p->top - p->base) >= STACK_SIZE ? true : false;

    }

  • 入栈,传入结构体指针和将要入栈的元素,先存储数据,然后再将栈顶指针地址加一(栈中数据存储的地址是由小至大);

    void push(pStack p, int topElement) {

    1. int *q = NULL;
    2. if (isFull(p))
    3. {
    4. q = (int *)realloc(p->base, STACK_INCREMENT * sizeof(int)); // 重新调整内存块的大小
    5. p->base = q;
    6. p->stackSize = p->stackSize + STACK_INCREMENT;
    7. }
    8. *(p->top)++ = topElement;

    }

  • 出栈,传入结构体指针和保存栈顶元素的指针,先将栈顶指针的地址减一,然后再取址;

    void pop(pStack p, int *topElement) {

    1. if (isEmpty(p))
    2. {
    3. printf("空栈");
    4. }
    5. p->top--;
    6. *topElement = *p->top;

    }

  • 求栈顶元素,与栈顶元素出栈相同,只是不需要讲栈顶指针的地址减一

    int getStackTop(SqStack s) {

    1. int topElement;
    2. if (isEmpty(&s))
    3. {
    4. return 0;
    5. }
    6. topElement = *(s.top - 1);
    7. return topElement;

    }

  • 清空栈,不断将让栈中元素出栈,直至栈空

    void clearStack(SqStack s) {

    1. while (!isEmpty(&s))
    2. {
    3. int tmp;
    4. pop(&s, &tmp);
    5. }

    }

  • 求栈当前大小

    int getStackLength(SqStack s) {

    1. int i = 0;
    2. int *q = s.top;
    3. while (q != s.base)
    4. {
    5. q--;
    6. i++;
    7. }
    8. return i;

    }

发表评论

表情:
评论列表 (有 0 条评论,223人围观)

还没有评论,来说两句吧...

相关阅读

    相关 顺序c++实现

    栈是计算机里边极其常见的一类数据结构,特别是在编译原理里边,栈溢出(stack overflow)甚至成为世界知名的计算机人员交流网站,顺序栈也是十分常用的。 \i