c语言实现栈及双栈队列
目的
使用C语言实现一个栈。
使用2个栈实现队列效果
栈与队列
栈: 元素先进后出。
只有 1 个口子,所以只能先进后出
队列:元素先进先出。
有 2 个口子,所以可以先进先出
理解完后,
上代码。
实现一个栈
#include <stdlib.h>
#include <stdio.h>
#include <string>
#define STACK_SIZE 5 // 栈空间大小
#define ELEMENT_TYPE int
// 栈数据结构
typedef struct Stack {
ELEMENT_TYPE _data[STACK_SIZE];
int _top;
}StackList;
// 初始化栈
void init(StackList *stack)
{
memset(stack->_data, 0, sizeof(ELEMENT_TYPE) * STACK_SIZE);
stack->_top = 0;
}
// 栈是否为空
bool empty(StackList *stack)
{
return stack->_top == 0;
}
// 栈是否为满
bool full(StackList *stack)
{
return stack->_top > (STACK_SIZE-1);
}
// 入栈
bool push(StackList *stack, ELEMENT_TYPE data)
{
if (full(stack)) {
printf("错误:栈溢出\n");
return false;
}
stack->_data[stack->_top++] = data;
printf("入栈:%d\n", data);
return true;
}
// 出栈
ELEMENT_TYPE pop(StackList *stack)
{
if (empty(stack)) {
printf("错误:栈为空\n");
return (ELEMENT_TYPE)0;
}
ELEMENT_TYPE data = stack->_data[--stack->_top];
printf("出栈%d\n", data);
return data;
}
// 主函数
int main(int argc, char **argv)
{
StackList stack_list;
init(&stack_list);
push(&stack_list, 1);
push(&stack_list, 2);
push(&stack_list, 3);
push(&stack_list, 4);
push(&stack_list, 5);
push(&stack_list, 6);
pop(&stack_list);
pop(&stack_list);
pop(&stack_list);
pop(&stack_list);
pop(&stack_list);
pop(&stack_list);
return 0;
}
调试结果:
实现 2 个栈的队列效果
#include <stdlib.h>
#include <stdio.h>
#include <string>
#define STACK_SIZE 5 // 栈空间大小
#define ELEMENT_TYPE int
// 栈数据结构
typedef struct Stack {
ELEMENT_TYPE _data[STACK_SIZE];
int _top;
}StackList;
// 初始化栈
void init(StackList *stack)
{
memset(stack->_data, 0, sizeof(ELEMENT_TYPE) * STACK_SIZE);
stack->_top = 0;
}
// 栈是否为空
bool empty(StackList *stack)
{
return stack->_top == 0;
}
// 栈是否为满
bool full(StackList *stack)
{
return stack->_top > (STACK_SIZE-1);
}
// 入栈
ELEMENT_TYPE push(StackList *stack, ELEMENT_TYPE data)
{
if (full(stack)) {
printf("错误:栈溢出\n");
return -1;
}
stack->_data[stack->_top++] = data;
//printf("入栈:%d\n", data);
return data;
}
// 出栈
ELEMENT_TYPE pop(StackList *stack)
{
if (empty(stack)) {
printf("错误:栈为空\n");
return -1;
}
ELEMENT_TYPE data = stack->_data[--stack->_top];
//printf("出栈%d\n", data);
return data;
}
// 主函数
int main(int argc, char **argv)
{
StackList stack_list1, stack_list2;
init(&stack_list1);
init(&stack_list2);
printf("stack_list1 入栈:%d\n", push(&stack_list1,1));
printf("stack_list1 入栈:%d\n", push(&stack_list1,2));
printf("stack_list1 入栈:%d\n", push(&stack_list1,3));
push(&stack_list2, pop(&stack_list1));
push(&stack_list2, pop(&stack_list1));
push(&stack_list2 ,pop(&stack_list1));
printf("\n----------我是分割线----------\n\n");
printf("stack_list2 出栈:%d\n", pop(&stack_list2));
printf("stack_list2 出栈:%d\n", pop(&stack_list2));
printf("stack_list2 出栈:%d\n", pop(&stack_list2));
return 0;
}
调试结果:
_End
完事儿了。
本文来自博客园,作者:想想就很离谱,转载请注明原文链接:https://www.cnblogs.com/lvvou/p/15694510.html