何为栈
栈是个类似水桶一样的容器,最开始导进去的水总是最后被倒出(frist in last out).
栈的初始化,如下图所示:
当数字1被放入栈时,如下图所示:
当2被放入时,如图所示:
将栈顶元素拿出(pop),如图所示:
栈也可以看作是一个竖起来的数组,有两个指针分别指向bottom以及top, 当有元素入栈时,top向上移动。当需要出栈时,top向下移动。
c语言实现(数组)
#include <stdio.h>
#include <time.h>
#define max_size 10
int stack[max_size];
int top = -1;
int is_full()
{
if (top == max_size-1)
return 1; //full
else
return 0;// not full
}
int is_empty()
{
if (top == -1)
return 1; // empty
else
return 0;
}
int push(int num)
{
if (is_full()) {
printf("stack full\n");
return 0;
}
else
{
top++;
stack[top] = num;
return 1;
}
}
int pop()
{
if (is_empty())
{
printf("stack is empty\n");
return 0;
}
else
{
int num = stack[top];
top--;
return num;
}
}
int main()
{
srand((unsigned)time(NULL));
for (int i = 0; i < max_size; i++)
{
int num = rand() % 10 + 0;
printf("%d ", num);
push(num);//放入随机数字
}
printf("\n");
int list[max_size];
for (int i = 0; i < max_size; i++)
{
list[i] = pop();
}
for (int i = 0; i < max_size; i++)
{
printf("%d ", list[i]);
}
}
先总结到这里,以后再总结链表栈。