闲来没事,写写代码
闲来没事,写写代码

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 
复制代码
 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 }
复制代码

 

posted on   闲来没事,写写代码  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
 
点击右上角即可分享
微信分享提示