入栈的算法
A. 入栈出栈题目怎么做
栈的原则是先进后出,进栈序列为el,e2,e3,e4,芹信不是说一次性进入的,而是先进了el,e2,这时候出栈的话一定出e2,e3,e4又进栈,这时候出栈顺序就是e4,e3,el 了,总的出栈顺序就是e2,e4,e3,渣州el 了。
栈的特点是先进后出,即:进去的早,出来的晚。
54321进栈,5在栈底,1在栈顶!
出一次栈,则栈顶的1先出来,2成为新的栈顶。
ABCD入栈,D成为新的栈顶。
全部出栈:D C B A 2 3 4 5
综上,所有元素退栈顺序为:1 D C B A 2 3 4 5
进栈(PUSH)算法
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素);
退栈(POP)算法
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作嫌梁轮②);
②X=S(TOP),(退栈后的元素赋给X):
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。
以上内容参考:网络-栈
B. 栈的操作原则是什么
堆栈使用两种基本操作:推入(压栈,push)和弹出(弹栈,pop):
1、推入:将资料放入堆栈顶端,堆栈顶端移到新放入的资料。
2、弹出:将堆栈顶端资料移除,堆栈顶端移到移除后的下一笔资料。
特点
堆栈的基本特点:
1、先入后出,后入先出。
2、除头尾节点之外,每个元素有一个前驱,一个后继。
软件堆栈
堆栈可以用数组和链表两种方式实现,一般为一个堆栈预先分配一个大小固定且较合适的空间并非难事,所以较流行的做法是Stack结构下含一个数组。如果空间实在紧张,也可用链表实现,且去掉表头。
这里的例程是以C语言实现的。
(2)入栈的算法扩展阅读:
基本算法
一、进栈(PUSH)算法
1、若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作2);
2、置TOP=TOP+1(栈指针加1,指向进栈地址);
3、S(TOP)=X,结束(X为新进栈的元素);
二、退栈(POP)算法
1、若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作2);
2、X=S(TOP),(退栈后的元素赋给X):
3、TOP=TOP-1,结束(栈指针减1,指向栈顶)。
C. 栈的进出算法..
栈数据操作是先进后出,后进先出,但是这是说已经存储在栈的数据,对于尚未进栈的数据流,这种说法是不正确的。拿上面的例子说,分别说明:A:1进栈,1出栈,2进栈,3进栈,3出栈,2
出栈,4进栈,4
出栈B:1进栈,2进栈,3进栈,3出栈,4进栈,4出栈,2
出栈,1
出栈D:1进栈,2进栈,2出栈,3进栈,3出栈,4进栈,4
出栈,1
出栈
C答案明显是1,2,3,4顺序进栈,出栈顺序只能是4,3,2,1,圆敬1是
不能比2
先出栈,因为1,2已经在栈,而且1比2现进栈。所以,渣庆在判断出栈顺序的时候,需要考虑在进栈的如腔握过程中是否有栈元素出栈,而不能只考虑所有元素进栈后的出栈顺序。
D. 栈的入栈和出栈的顺序规律是什么
入栈的顺序规律是排在前面的先进,排在后面的后进。
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。
向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
任何出栈元素后面的元素必须满足两条规则
1、在原序列(也就是入栈序列)中顺序比出栈元素小的,必须是逆序。
2、在原序列(也就是入栈序列)中顺序核亩比出栈元素大的,顺序无所谓。
3、出栈元素表示的是出栈后面的所有元素。
很多人都误解这个理念从而对栈产生困惑。而系统栈在计算机体系结构中又起到一个跨部件交互的媒介区域的作用 即 cpu 与内存的交流通道 ,cpu只从系统给我们自己编写的应用程序所规定的栈入口线性地读取执行指令, 用一个形象的词来形改闭森容态旁它就是pipeline(管道线、流水线)。cpu内部交互具体参见 EU与BIU的概念介绍。
E. 栈的运算遵循什么原则
栈的运算遵循(先进后出、后进先出)的原则。
例如从输入序列ABCDE中,先将A入栈, 然后接下来是要想办法让E先入栈。
首先,将B、C、D、E依次入栈, 这时候栈的输出序列数E、D、C、B、A,然后将E、D、C、B依次出栈, 现在输入的序列就是E、D、C、B (这里利用了栈的特点: 输入的序列经过了入栈出栈后,序列的携郑次序会颠倒), 最后E、D、C、B依次入栈, 这时候,输出序列就是B、C、D、E、A。
(5)入栈的算法扩展阅读:
基本算法
进栈(PUSH)算法
1、若TOP≥n时,则给出溢出信息,作出错处理(进栈前首袭伍先检查栈是否已满,满则溢出;不满则作2)
2、置TOP=TOP+1(栈指针加1,指向进栈地址)
3、S(TOP)=X,结束(X为新进栈的元素)
退栈(POP)算法
1、若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作2)
2、X=S(TOP),(退栈后拍隐或的元素赋给X)
3、TOP=TOP-1,结束(栈指针减1,指向栈顶)
F. 用C语言编写函数实现顺序栈的进栈、退栈、取栈顶的算法。
#include<stdio.h>
#define stacksize 100 //假定预分配的栈空间最多为100 个元素
typedef char elementtype; //假定栈元素的数据类型为字符 ,在此处可以自行设置
typedef struct
{
elementtype data[stacksize];
int top;
}seqstack;
// 置空栈
void initstack(seqstack *s)
{
s->top=-1;
//解释一下,s->top 指向的是当前栈顶元素的位置
//当要向栈中添加一个新元素时,要先将s->top增加1,
//此时s->top 指向的就是新元素要添加的位置了。
//所以当栈为空时,填加第一元素时,top加1 后
//s->top的值就变为0,也就是第一个元素的位置了。
}
//判栈空
int stackempty(seqstack *s)
{
if(s->top==-1)
return 1; //若相等就返回1,否则为0
else return 0;
}
//入栈
void push(seqstack *s,elementtype x)
{
if(s->top==stacksize -1 ) //进栈前判断栈是否已经满了
printf(" stack overflow\n");
else
{
s->top= s->top + 1;
s->data[s->top]=x;
}
}
//出栈
elementtype pop(seqstack *s)
{
if(stackempty(s)) //出栈前先判断当前栈中是否有内容
printf("stack is empty\n");
else
{
return s->data[s->top--]; //出栈后s->top的值会自减1
}
}
//取栈顶元素(只是想知道栈顶的值,并没有出栈)
elementtype gettop(seqstack *s)
{
if(stackempty(s))
{
printf("stack already empty.\n");
}
else return s->data[s->top];
}
int main()
{
elementtype x;
seqstack *s; //定义一个栈,用指针的方式定义的
initstack(s); //想初始化定义好的栈
//当栈为空时调用出栈操作
pop(s);
//向栈中添加一个元素a
push(s,'a');
//观察此时的栈顶元素
x=gettop(s);
printf("%c\n",x);
//再添加一个元素b
push(s,'b');
//观察此时的栈顶元素
x=gettop(s);
printf("%c\n",x);
//弹出栈顶的元素
x=pop(s);
printf("%c\n",x);
//观察弹出后栈顶元素的变化情况
x=gettop(s);
printf("%c\n",x);
return 0;
}
G. 栈的顺序结构和入栈、出栈算法
typedef struct {
SElemType *base;/*设栈顶栈底两指针的目的是便于判断栈是否为空*/
SElemType *top;/*栈的当前可使用的肆友型最大容量*/
int StackSize;
}SqStack;
int Push(SqStack &S,SElemType e){
if(S.top-s.base>=S.stacksize){
S.base=(ElmenType *)realloc(S.base,
(S.stacksize+STACKINCREMENT)*sizeof(ElemType));
if(!S.base)exit(OVERFLOW);
S.top=S.stacksize;
S.stacksize+=STACKINCREMENT;
}/*Push*/
*S.top++=e;
return OK;
}
int Pop(SqStack &S,SElenType &e){
if(空缺裂猜部分)return ERROR;
e=*--S.top;
return OK;
}/告春*Pop*/