物联网
您现在所在的位置:首页>企业动态>物联网

数据结构之栈

编辑:学到牛牛IT培训    发布日期: 2023-09-04 08:59:15  


1.简介

栈(stack)又名堆栈,它是一种访问受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。

向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。故栈又称为先进后出(FILO—first in last out)线性表。


1.png


栈包含的基本操作:

1.入栈操作:在栈顶插入数据

2.出栈操作:在栈顶删除数据

3.栈中没有元素时,称为空栈

4.栈中存储达到预定上限,称为满栈

栈可以使用数组或链表作为物理存储结构,使用数组实现的队列称为顺序栈,使用链表实现的队列称为链式栈。本文针对最常用的顺序栈进行代码实现。

2.顺序栈

顺序栈的实现依赖数组作为底层物理存储结构,其特点是内存连续,并且数组的大小一般在初始时固定(如果使用动态内存可以修改)。

#include <string.h>

#include <stdio.h>

#include <stdlib.h>


struct Stack {

int* buf;

int top;

int maxSize;

};


// 栈初始化

void init(struct Stack* st, int size)

{

st->top = 0;

st->maxSize = size;

st->buf = (int*)malloc(sizeof(int) * size);

}


// 栈内存释放

void destroy(struct Stack* st)

{

free(st->buf);

st->buf = NULL;

}

// 遍历栈

void display(struct Stack* st)

{

printf("stack size = %d, val = ", st->top);

int i = 0;

while (i < st->top) {

printf("%d ", st->buf[i]);

i++;

}

printf(" ");

}

// 判断栈是否为满

int isfull(struct Stack* st)

{

return st->top == st->maxSize;

}

// 判断栈是否为空

int isempty(struct Stack* st)

{

return st->top == 0;

}

// 入栈

int push(struct Stack* st, int val)

{

if (isfull(st)) {  // 栈满,无法入栈,返回-1

return -1;

}

st->buf[st->top] = val;

return st->top++; // 返回入栈的位置

}

// 出栈

int pop(struct Stack* st)

{

if (isempty(st)) {

return -1;

}

return --st->top;

}


// 栈空:返回-1; 栈不空:返回0,pval执行的变量存储获取的栈顶元素

int getTop( struct Stack *st, int *pval )

{

if( isempty( st ) ){

return -1;   // 无栈顶元素

}

*pval = st->buf[st->top - 1];

return 0;

}


int main()

{

struct Stack stack;

init(&stack, 5);

display(&stack);

push(&stack, 10);

push(&stack, 20);

push(&stack, 30);

push(&stack, 40);

push(&stack, 50);

display(&stack);

printf("push ret = %d ", push(&stack, 70));   // 栈满,无法入栈,返回-1

pop(&stack);

pop(&stack);

display(&stack);

printf("push ret = %d ", push(&stack, 70));

display(&stack);

destroy(&stack);

return 0;

}


免费试学
课程好不好,不如实地听一听

封闭学习

2

1

联系我们

电话:028-61775817

邮箱:1572396657@qq.com

地址:成都市金牛区西城国际A座8楼

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
    物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

    扫一扫,免费咨询

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
    物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

    微信公众号

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

学一流技术,找高薪工作

物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

7-24小时服务热线:

028-61775817

版权声明 网站地图

蜀ICP备2021001672号

课程问题轻松问