栈的基本操作
发布网友
发布时间:2022-04-20 04:34
我来回答
共3个回答
热心网友
时间:2023-07-22 15:23
我电脑出问题了,没有调试,看了你的代码,发现两处处问题:
1.初始化函数中你用了L.base = L.top,我觉得应该是L.top = L.base才正确。
2.show函数中if(L.top > L.base),我觉得应该是while(L.top > L.base )
既然是用C++,我认为用类来描述栈更有条理。类封装之后只向外面提供接口,而且都是模块操作。C虽然函数也是模块操作,但总感觉函数多,乱糟糟的。
以上仅为一家之言!
热心网友
时间:2023-07-22 15:24
构造空栈的函数 Initstack中
L.base=L.top; //空栈的标志
这句话不对,应该为
L.top = L.base;
热心网友
时间:2023-07-22 15:24
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define stack_init_size 100
#define stackincrement 10
typedef struct sqstack
{
int *base;
int *top;
int stacksize;
} sqstack;
int StackInit(sqstack *s)
{
s->base=(int *)malloc(stack_init_size *sizeof(int));
if(!s->base)
return 0;
s->top=s->base;
s->stacksize=stack_init_size;
return 1;
}
int Push(sqstack *s,int e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(int *)realloc(s->base,(s->stacksize+stackincrement)*sizeof(int));
if(!s->base)
return 0;
s->top=s->base+s->stacksize;
s->stacksize+=stackincrement;
}
*(s->top++)=e;
return e;
}
int Pop(sqstack *s,int e)
{
if(s->top==s->base)
return 0;
e=*--s->top;
return e;
}
int stackempty(sqstack *s)
{
if(s->top==s->base)
{
return 1;
}
else
{
return 0;
}
}
int conversion(sqstack *s)
{
int n,e=0,flag=0;
printf("输入要转化的十进制数:\n");
scanf("%d",&n);
printf("要转化为多少进制:2进制、8进制、16进制 填数字!\n");
scanf("%d",&flag);
printf("将十进制数%d转化为%d进制是:\n",n,flag);
while(n)
{
Push(s,n%flag);
n=n/flag;
}
while(!stackempty(s))
{
e=Pop(s,e);
switch(e)
{
case 10: printf("A");
break;
case 11: printf("B");
break;
case 12: printf("C");
break;
case 13: printf("D");
break;
case 14: printf("E");
break;
case 15: printf("F");
break;
default: printf("%d",e);
}
}
printf("\n");
return 0;
}
int main()
{
sqstack s;
StackInit(&s);
conversion(&s);
return 0;
}
专题篇|栈与队列详解
栈的基本操作有两个,即入栈和出栈。 入栈指将元素放入栈顶,出栈指将栈顶元素取出。栈的本质是一个容器,它可以存储任何类型的数据,但是栈的大小是固定的,因为它的元素只能在栈顶添加或删除。 栈有许多应用场景,比如我们在浏览网页时,可以使用浏览器的 “返回” 功能,这就是栈的应用之一。 当我们浏览网页时,每...
非结构化数据如何可视化呈现?
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准...
数据结构(六)——栈(一):栈的基本知识
栈在栈顶进行操作,队列在队尾和队头进行操作。栈遵循先进后出原则,队列遵循先进先出原则。栈仅允许在栈顶进行插入和删除,而队列只允许在队尾插入并在队头删除。在遍历和数据访问效率上,队列通常优于栈。
【数据结构】栈的定义和基本操作(小白必看)
栈,作为数据结构中的一种,遵循后进先出的原则,仅允许在表的一端进行插入与删除操作。它有两种存储方式:顺序栈与链表栈。顺序栈利用连续存储单元存放元素,并通过指针指示当前栈顶位置。链表栈则采用单链表实现,所有操作在链表头部执行。本文将重点介绍顺序栈的实现。链表栈与单链表相似,具体实现可参考...
栈的基本操作
(1)初始化一个栈:InitStack (2)销毁一个栈:DestroyStack (3)清空一个栈:ClearStack (4)判断一个栈是否为空:StackIsEmpty (5)返回栈中元素个数,即栈的长度:StackLength (6)入栈,把一个元素加入到栈中:Push (7)出栈,把栈顶元素给干掉:Pop (8)返回栈顶元素,但不出栈...
栈的基本运算包括
栈的基本运算包括如下:1、入栈运算 入栈运算是指在栈顶位置插入一个新元素。首先将栈顶指针加一(即top加1),然后将新元素插入到栈顶指针指向的位置。当栈顶指针已经指向存储空间的最后一个位置时,说明栈空间已满,不可能再进行入栈操作。这种情况称为栈上溢错误。2、退栈运算 退栈是指取出栈顶...
栈是什么意思
一、栈的基本定义 栈是一种遵循特定数据操作规则的线性数据结构,其规则是“后进先出”。这意味着最后一个被放入栈的元素总是第一个被取出。想象一下一摞盘子,我们每次都是在顶端放新的盘子,取走也是取最顶端的盘子,这就是栈的一个直观表现。二、栈的主要操作 栈的主要操作包括入栈和出栈。入栈...
栈的特点是___,队列的特点是___。(3分)
栈的基本操作有:入栈,将元素添加到栈顶。出栈,从栈顶移除元素。查看栈顶元素,查看栈顶元素但不移除它。栈的主要用途包括:1、实现递归算法:递归算法需要在函数调用时保存函数的上下文信息,栈可以很好地实现这一需求。2、表达式求值:在计算机编程中,栈可以用于表达式求值,通过栈顶元素的进出操作来...
栈是先进先出还是先进后出?
栈是先进后出。栈是一种线性数据结构,其操作遵循后进先出的原则。这意味着最后一个被放入栈的元素会是第一个被取出的元素。具体解释如下:栈的基本特性 栈具有一个特性,称为“后进先出”。当元素入栈时,它们会按照进入的顺序存放,但当你需要访问或移除这些元素时,最先进入的元素会被压在下面,...
出栈的栈基本操作
1.进栈(PUSH)①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);②置TOP=TOP+1(栈指针加1,指向进栈地址);③S(TOP)=X,结束(X为新进栈的元素);2.出栈(POP)①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈,...
栈怎么读音是什么
栈的基本操作包括入栈(push)和出栈(pop)。入栈操作是将元素添加到栈顶,而出栈操作则是从栈顶移除元素。由于栈遵循后进先出的原则,因此最后入栈的元素会最先被出栈。这种特性使得栈在处理某些问题时具有独特的优势,比如解析表达式中的括号匹配问题,或者在函数调用过程中保存和恢复现场信息等。在...