堆栈
后进先出
基本的操作有:push(入堆) pop(弹出)
入堆:将数据放入到堆栈的顶部
不过这种也是预先分配好内存,只不过先分配结构体的内存,然后分配结构体内部Array的内存。
后进先出
基本的操作有:push(入堆) pop(弹出)
入堆:将数据放入到堆栈的顶部
弹出:将顶端的数据输
#include<stdio.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct Stk
{
int Array[10];
int Top;
} Stack;
int stack_empty(Stack *Stack1)
{
if(Stack1->Top==0)
{
return 1;
}
else
{
return 0;
}
}
void push(Stack *Stack1,int x)
{
Stack1->Top=Stack1->Top+1;
Stack1->Array[Stack1->Top]=x;
}
int pop(Stack *Stack1)
{
if(stack_empty(Stack1))
{
printf("underflow");
}
else
{
Stack1->Top=Stack1->Top-1;
return Stack1->Array[Stack1->Top+1];
}
}
int main()
{
Stack *Stack1=(Stack *)malloc(sizeof(Stack));
Stack1->Top=0;
push(Stack1,3);
push(Stack1,4);
push(Stack1,1);
push(Stack1,10);
printf("%d ",pop(Stack1));
printf("%d ",pop(Stack1));
printf("%d ",pop(Stack1));
}
如果不想用数组预先分配好内存空间,Stack 结构体内用×Array指针来表示
可以更改一下代码:“
#define N 10
typedef struct Stk
{
int *Array;
int Top;
} Stack;
int main()
{
Stack *Stack1=(Stack *)malloc(sizeof(Stack));
Stack1->Array = (int *)malloc(sizeof(int) * N);
Stack1->Top=0;
push(Stack1,3);
push(Stack1,4);
push(Stack1,1);
push(Stack1,10);
printf("%d ",pop(Stack1));
printf("%d ",pop(Stack1));
printf("%d ",pop(Stack1));
}
不过这种也是预先分配好内存,只不过先分配结构体的内存,然后分配结构体内部Array的内存。