发布网友 发布时间: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