mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-10-31 18:37:48 +08:00 
			
		
		
		
	 3f4220de81
			
		
	
	3f4220de81
	
	
	
		
			
			* preorder, inorder, postorder -> pre-order, in-order, post-order * Bug fixes * Bug fixes * Update what_is_dsa.md * Sync zh and zh-hant versions * Sync zh and zh-hant versions. * Update performance_evaluation.md and time_complexity.md * Add @khoaxuantu to the landing page. * Sync zh and zh-hant versions * Add @ khoaxuantu to the landing page of zh-hant and en versions.
		
			
				
	
	
		
			104 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|  * File: array_stack.c
 | |
|  * Created Time: 2023-01-12
 | |
|  * Author: Zero (glj0@outlook.com)
 | |
|  */
 | |
| 
 | |
| #include "../utils/common.h"
 | |
| 
 | |
| #define MAX_SIZE 5000
 | |
| 
 | |
| /* 基于数组实现的栈 */
 | |
| typedef struct {
 | |
|     int *data;
 | |
|     int size;
 | |
| } ArrayStack;
 | |
| 
 | |
| /* 构造函数 */
 | |
| ArrayStack *newArrayStack() {
 | |
|     ArrayStack *stack = malloc(sizeof(ArrayStack));
 | |
|     // 初始化一个大容量,避免扩容
 | |
|     stack->data = malloc(sizeof(int) * MAX_SIZE);
 | |
|     stack->size = 0;
 | |
|     return stack;
 | |
| }
 | |
| 
 | |
| /* 析构函数 */
 | |
| void delArrayStack(ArrayStack *stack) {
 | |
|     free(stack->data);
 | |
|     free(stack);
 | |
| }
 | |
| 
 | |
| /* 获取栈的长度 */
 | |
| int size(ArrayStack *stack) {
 | |
|     return stack->size;
 | |
| }
 | |
| 
 | |
| /* 判断栈是否为空 */
 | |
| bool isEmpty(ArrayStack *stack) {
 | |
|     return stack->size == 0;
 | |
| }
 | |
| 
 | |
| /* 入栈 */
 | |
| void push(ArrayStack *stack, int num) {
 | |
|     if (stack->size == MAX_SIZE) {
 | |
|         printf("栈已满\n");
 | |
|         return;
 | |
|     }
 | |
|     stack->data[stack->size] = num;
 | |
|     stack->size++;
 | |
| }
 | |
| 
 | |
| /* 访问栈顶元素 */
 | |
| int peek(ArrayStack *stack) {
 | |
|     if (stack->size == 0) {
 | |
|         printf("栈为空\n");
 | |
|         return INT_MAX;
 | |
|     }
 | |
|     return stack->data[stack->size - 1];
 | |
| }
 | |
| 
 | |
| /* 出栈 */
 | |
| int pop(ArrayStack *stack) {
 | |
|     int val = peek(stack);
 | |
|     stack->size--;
 | |
|     return val;
 | |
| }
 | |
| 
 | |
| /* Driver Code */
 | |
| int main() {
 | |
|     /* 初始化栈 */
 | |
|     ArrayStack *stack = newArrayStack();
 | |
| 
 | |
|     /* 元素入栈 */
 | |
|     push(stack, 1);
 | |
|     push(stack, 3);
 | |
|     push(stack, 2);
 | |
|     push(stack, 5);
 | |
|     push(stack, 4);
 | |
|     printf("栈 stack = ");
 | |
|     printArray(stack->data, stack->size);
 | |
| 
 | |
|     /* 访问栈顶元素 */
 | |
|     int val = peek(stack);
 | |
|     printf("栈顶元素 top = %d\n", val);
 | |
| 
 | |
|     /* 元素出栈 */
 | |
|     val = pop(stack);
 | |
|     printf("出栈元素 pop = %d ,出栈后 stack = ", val);
 | |
|     printArray(stack->data, stack->size);
 | |
| 
 | |
|     /* 获取栈的长度 */
 | |
|     int size = stack->size;
 | |
|     printf("栈的长度 size = %d\n", size);
 | |
| 
 | |
|     /* 判断是否为空 */
 | |
|     bool empty = isEmpty(stack);
 | |
|     printf("栈是否为空 = %s\n", empty ? "true" : "false");
 | |
| 
 | |
|     // 释放内存
 | |
|     delArrayStack(stack);
 | |
| 
 | |
|     return 0;
 | |
| }
 |