#include<stdio.h>
#include<stdlib.h>
#define MAX 10
/*有些书本上有另一种写法,我学的课程里面说是有点多余的*/
struct myStack
{
int*stackMemory;
int stackTop;
};
//分配内存,创建栈
/*struct myStack * createStack()
{
struct myStack* pStack = (struct myStack*)malloc(sizeof(struct myStack));
//栈结构,存储数据内存
//申请一段堆内存形成一个数组,充当栈存放数据的容器
pStack->stackMemory = (int *)malloc(sizeof(int)*MAX);
pStack->stackTop = -1;
return pStack;
}*/
//入栈
void push(struct myStack * pStack, int data)
{
if(stackTop +1==10)
{
printf("栈满,无法入栈!");
return ;
}
pStack->stackMemory[++pStack->stackTop] = data;
}
//出栈
void pop(struct myStack*pStack,int *data)
{
if(pStack->stackTop == -1)
{
printf("栈为NULL,无法出栈");
return;
}
data=pStack->stackMemory[pStack->stackTop--]
}
*/
int main()
{
//通常情况我是直接用数组充当栈内存
int stack[10]; /*栈内存*/
int stackTop = -1; /*能够衡量位置的东西,就是栈顶标记,链表里面的位置是指针,只能用指针去标识地方,栈顶标记是整数,用下标去充当位置。栈顶标记等于-1,是因为为了让栈顶标记和数组下标同步,因为数组下标从0开始*/
//二进制转换问题
int num= 111;
printf("%d的二进制是:\n", num);
while(num != 0)
{
/*数组栈的入栈操作*/
stackTop++;
stack[stackTop]=num % 2; /*把当前元素放到栈里面去*/
num /= 2;
}
while(stackTop != -1)/*和最开始作比较,不为-1说明栈不为空*/
{
/*因为栈顶标记正好是等于数组下标*/
printf("%d", stack[stackTop]);/*获取栈顶元素*/
/*出栈:只是把栈顶标记往下挪,并没有删除数组中的元素*/
stackTop--;
}
/*栈这种结构必须先进后出*/
printf("\n");
system("pause");
return 0;
/*输入为 111的二进制是11101111*/
}
数组栈
最新推荐文章于 2022-09-30 08:07:11 发布