当前位置:首页 » 服务存储 » 元素入栈代码为栈增加存储空间
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

元素入栈代码为栈增加存储空间

发布时间: 2023-08-13 16:30:32

‘壹’ c语言堆栈和队列

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

以上是从数据结构角度来看,从操作系统角度来看,所有的数据结构都是对虚拟内存的操作,堆是堆,栈是栈,栈指的是C语言函数所使用的自动有函数回收的虚拟内存空间,而堆则有操作系统堆管理器来管理的那部分虚拟内存,从C语言角度来看,使用malloc函数动态分配的内存,就是堆内存。

‘贰’ C语言入栈出栈操作的程序,希望有人为我解答

您好:

你是在学习数据结构方面的知识吧。

首先呢,你学习栈,要了解栈的定义,明白它是怎么一回事,就是去理解他的思想。

最后才去用代码来体现出来。

栈是先进后出,其实是用代码控制的,

其实你要他先进先出也可以。

你只要明白他的原理就行。

代码,你可以理解为跟计算的一种对话的语言。

不用想的那么复杂。

就好比说话,你只要知道你要说什么就行(算法),而不用刻意明白要怎么说(语法)。

下面给我出我以前写的代码,关于栈的,顺序栈,其实还有链栈。

/*数据结构-栈*/
/*异常的细节处理还没弄好*/
#include<iostream>
#include<stdlib.h>
#include<malloc.h>
#definelen_chu_shi50//初始空间大小
#definelen_zeng_jia10//额外增加空间大小
#defineOK0//正确
#defineOVER-2//
#defineERROR-1//
usingnamespacestd;
typedefintelem_type;//元素类型
typedefintfunction_type;//函数类型
typedefstructzhan
{
elem_type*top;//栈顶
elem_type*base;//栈底
intlen;//当前空间大小
}zhan;//栈结构

function_typeInit_zhan(zhan*exam);//初始化栈
function_typeGet_top(zhan*exam,elem_type*e);//获取栈顶元素
function_typeAdd_top(zhan*exam,elem_type*e);//增加栈顶元素
function_typeDelete_top(zhan*exam,elem_type*e);//删除栈顶元素

intmain(intargc,char*argv[])
{
zhan*example=(zhan*)malloc(sizeof(zhan));
Init_zhan(example);
returnOK;
}

function_typeInit_zhan(zhan*exam)
{
exam->base=(elem_type*)malloc(len_chu_shi*sizeof(elem_type));
if(!exam->base)//分配失败
exit(OVER);
exam->top=exam->base;
exam->len=len_chu_shi;
returnOK;
}//--end
function_typeGet_top(zhan*exam,elem_type*e)
{
if(!exam->base)
exit(OVER);
*e=*(exam->top-1);//不能用自减运算符,那样会改变栈顶指针的值
returnOK;
}//--end
function_typeAdd_top(zhan*exam,elem_type*e)
{
if(exam->len<=exam->top-exam->base)//我个人觉得,如果已经"<",就已经数据溢出了,就应该报错
exam->base=(elem_type*)realloc(exam->base,(exam->len+len_zeng_jia)*sizeof(elem_type));
if(!exam->base)//分配失败
exit(OVER);
*(exam->top++)=*e;//应该是先改变栈顶指针的内容,然后栈顶指针再自增
exam->len+=len_zeng_jia;
returnOK;
}//--end
function_typeDelete_top(zhan*exam,elem_type*e)
{
if(!exam->base)//空栈
exit(OVER);
*e=*(--exam->top);//应该是栈顶指针先自减,然后获取栈顶指针的内容
returnOK;
}//--end