1 //SeqStack.h 2 3 4 5 6 7 #ifndef SEQSTACK_H 8 #define SEQSTACK_H 9 10 11 #include<stdlib.h> 12 #include<stdio.h> 13 //数组去模拟栈的顺序存储 14 #define MAX_SIZE 1024 15 #define SEQSTACK_TRUE 1 //栈为空 16 #define SEQSTACK_FALSE 0 //栈非空 17 18 typedef struct SEQSTACK { 19 20 void* data[MAX_SIZE]; 21 int size; 22 23 }SeqStack; 24 25 26 //初始化栈 27 SeqStack* Init_SeqStack(); 28 //入栈 29 void Push_SeqStack(SeqStack* stack,void* data); 30 //返回栈顶元素 31 void* Top_SeqStack(SeqStack* stack); 32 //出栈 33 void Pop_SeqStack(SeqStack* stack); 34 //判断是否为空 35 int IsEmpty_SeqStack(SeqStack* stack); 36 //返回栈中元素的个数 37 int Size_SeqStack(SeqStack* Stack); 38 //清空栈 39 void Clear_SeqStack(SeqStack* stack); 40 //销毁 41 void FreeSpace_SeqStack(SeqStack* stack); 42 43 44 45 46 #endif
1 //SeqStack.c 2 3 4 5 #include"SeqStack.h" 6 //#include<stdlib.h> 7 8 9 10 11 //初始化栈 12 SeqStack* Init_SeqStack() { 13 SeqStack* stack = (SeqStack*)malloc(sizeof(SeqStack)); 14 for (int i = 0; i < MAX_SIZE; i++) { 15 stack->data[i] = NULL; 16 17 } 18 stack->size = 0; 19 return stack; 20 } 21 22 23 //入栈 24 void Push_SeqStack(SeqStack* stack, void* data) { 25 if (stack == NULL) { 26 return; 27 } 28 if (data == NULL) { 29 return; 30 } 31 if (stack->size == MAX_SIZE) { 32 return; 33 } 34 stack->data[stack->size] = data; 35 stack->size++; 36 37 return; 38 } 39 40 41 //返回栈顶元素 42 void* Top_SeqStack(SeqStack* stack) { 43 if (stack == NULL) { 44 return NULL; 45 } 46 if (stack->size == 0) { 47 return NULL; 48 } 49 50 return stack->data[stack->size-1]; 51 52 } 53 //出栈 54 void Pop_SeqStack(SeqStack* stack) { 55 if (stack==NULL) { 56 return; 57 } 58 if (stack->size == 0) { 59 return; 60 } 61 stack->data[stack->size - 1] = NULL; 62 stack->size--; 63 } 64 //判断是否为空 65 int IsEmpty_SeqStack(SeqStack* stack) { 66 if (stack == NULL) { 67 return -1; 68 } 69 if (stack->size == 0) { 70 return SEQSTACK_TRUE; 71 } 72 return SEQSTACK_FALSE; 73 } 74 //返回栈中元素的个数 75 int Size_SeqStack(SeqStack* Stack) { 76 return Stack->size; 77 } 78 //清空栈 79 void Clear_SeqStack(SeqStack* stack) { 80 if (stack == NULL) { 81 return; 82 } 83 for (int i = 0; i < stack->size; i++) { 84 stack->data[i] = NULL; 85 86 } 87 stack->size = 0; 88 return; 89 } 90 //销毁 91 void FreeSpace_SeqStack(SeqStack* stack) { 92 if (stack == NULL) { 93 return; 94 } 95 free(stack); 96 return; 97 }
1 //main1.c 2 3 4 5 6 #include"SeqStack.h" 7 8 //人结构体 9 typedef struct PERSION { 10 char name[64]; 11 int age; 12 }Persion; 13 int main(void) { 14 //创建栈 15 SeqStack* stack = Init_SeqStack(); 16 //创建数据 17 Persion p1 = { "p1",1 }; 18 Persion p2 = { "p2",2 }; 19 Persion p3 = { "p3",3 }; 20 //入栈 21 Push_SeqStack(stack,&p1); 22 Push_SeqStack(stack,&p2); 23 Push_SeqStack(stack,&p3); 24 //输出 25 while(Size_SeqStack(stack)>0) { 26 //访问栈元素 27 Persion* persion=(Persion*)Top_SeqStack(stack); 28 printf("Name:%s Age: %d\n",persion->name,persion->age); 29 //弹出栈顶元素 30 Pop_SeqStack(stack); 31 } 32 //释放内存 33 FreeSpace_SeqStack(stack); 34 return 0; 35 36 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!