代码如下
//定义栈的结构体
typedef struct
{
int* items;
int top;
int capacity;
} Stack;
//初始化栈
Stack* create_stack(int capacity)
{
Stack* stack = (Stack*)malloc(sizeof(Stack));//创建一个栈,开辟一段空间
stack ->items = (int*)malloc(sizeof(int)*capacity);
stack ->top = -1;
stack->capacity = capacity;
return stack;
}
//判断栈是否为空
int is_empty(Stack* stack)
{
return stack->top == -1;
}
//判断栈是否已满
void push(Stack* stack)
{
return stack->top==stack->capacity-1;
}
//入栈
void push(Stack* stack,int item)
{
if(is_full(stack))
{
printf("栈已满,无法入栈\n");
return 0;
}
stack->items[++stack->top] = item;
}
//出栈
int pop(Stack* stack)
{
if(is_empty(stack))
{
printf("栈为空,无法出栈");
return -1;
}
return stack->item[stack->top--]
}
//返回栈的元素
int peek(Stack* stack)
{
if(is_empty(stack))
{
printf("栈为空\n");
return -1;
}
return stack->items[stack->top];
}
//返回栈的大小
int size(Stack* stack)
{
return stack->top+1;
}
/******************基于链表实现栈*************/
struct Node
{
int data;
struct Node* next;
};
//入栈
void push(struct Stack* stack)
{
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = stack->top;
stack->top = newNode;
}
//出栈
int pop(struct Stack* stack)
{
if(stack->top==NULL)
{
printf("栈已空\n");
return -1;
}
int data=stack->top->data;
struct Node* temp = stack->top;
stack->top = stack->top->next;
free(temp);
return data;
}
int peek(struct Stack* stack)
{
if(stack->top==NULL)
{
prinf("栈已空"\n);
return -1;
}
return stack->top->data;
}
int empty(struct Stack* stack)
{
return stack->top->next==NULL;
}