简述一个栈插入元素以及删除元素的过程,并举例说明

发布网友 发布时间:2022-04-24 09:29

我来回答

3个回答

热心网友 时间:2023-10-09 11:15

子弹压入弹夹就是 元素入栈。子弹弹出就是出栈。
餐馆里,服务员罗盘子,就是元素入栈,拿走盘子就是出栈

栈插入元素过程(在栈不满时):
1.若栈空时,栈顶指针位于栈底,则元素放入栈顶指针位置,栈顶指针向上(后)移动。
2.若栈空时,栈顶指针位于栈底下方,则栈顶指针向上(后)移动,元素放入栈顶指针位置。

栈删除元素过程(栈不空时):
1.与上面的1对应。栈顶指针向下移动,读栈顶元素
2.与上面的2对应。读栈顶元素,栈顶指针向下移动。

热心网友 时间:2023-10-09 11:15

他的存储特点是“后进先出”而对于他的操作主要是根据这点来展开的,比如说:
你之前规定“进栈”的顺序是1,2,3,4,5,
然后“出栈”(删除元素)的顺序就是5,4,3,2,1
但是如果你在“进栈”时候改动为先进入1,2,3 ,然后出栈,3,2,1,
再进栈4,5,然后再出栈5,4,
这样看来进入栈的顺序还是1,2,3,4,5,但是出栈的顺序就是3,2,1,5,4
这就相当于你自己家的米桶一样,开始你装如米,但是你总是从最上面往出盛,不知道我说清楚没有,希望可以帮到你!

热心网友 时间:2023-10-09 11:16

以下程序通过VC6.0的编译,作用是将你输入的整数转换为 2 进制数(通过辅助栈实现的,过程中用到了你所要求的方法)。

#include "stdio.h"
#include "stdlib.h"

#define MAX 50
#define OK 1
#define ERROR 0
#define YES 1
#define NO 0

typedef int ElemType;
typedef int Status;
typedef struct tagStack{
ElemType data[MAX];
int top;
}Stack;

void InitStack(Stack *s){
s->top=-1;
}

Status isEmpty(Stack *s){
if(s->top==-1) return YES;
return NO;
}

Status Push(Stack *s,ElemType elme){
if(s->top>MAX)return ERROR;
s->top++;
s->data[s->top]=elme;
return OK;
}

ElemType Pop(Stack *s){
if(s->top==-1) return -1;
return s->data[s->top--];
}

int main(void){
int flag;
int b;
ElemType elemy;
Stack mystack;
InitStack(&mystack);
printf("Input number please:\n");
scanf("%d",&flag);
while(flag<0){
printf("You must input a number(>0)\n");
scanf("%d",&flag);
}
while(flag!=0){
b=flag%2;
if(Push(& mystack,b)==ERROR){
printf("ERROR\n");
break;
}
flag=flag/2;

}
printf("\n");
while(isEmpty(& mystack)!=YES){
elemy=Pop(& mystack);
printf("%d ",elemy);
}
printf("\n");
return 0;
}
如输入整数65,以下是执行结果:
Input number please:
65

1 0 0 0 0 0 1
Press any key to continue

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com