C語言實現棧及雙棧佇列
阿新 • • 發佈:2021-12-15
目的
使用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