C语言实现栈

参考大佬

https://blog.csdn.net/u012577474/article/details/102894248

一、代码实现

 1 #vim stack_c.c 

 

 1 #include "stdio.h"
 2 #include "stdlib.h"
 3 /*栈元素结构体(用来描述每个栈元素)*/
 4 struct List{
 5         int data;
 6         struct List *next;
 7 
 8 };
 9 /*栈结构体(栈顶元素指针,栈大小信息)*/
10 struct Stack{
11         struct List *head;
12         int size;
13 };
14 
15 /*栈初始化*/
16 struct Stack * StackInit(void)
17 {
18 struct Stack  *stack=NULL;
19 stack=(struct Stack *)malloc(sizeof(struct Stack)); //为栈分配一个内存块
20 stack->head=(struct List *)malloc(sizeof(struct List));//分配一个栈元素内存块
21 stack->head->next=NULL;
22 stack->size=0;
23 return stack;
24 }
25 /*入栈函数*/
26 int StackPush(struct Stack *stack,int data)
27 {
28 struct List *tmp=(struct List *)malloc(sizeof(struct List)); //分配一个栈元素内存块
29 tmp->data=data;
30 tmp->next=stack->head->next;
31 stack->head->next=tmp;
32 stack->size++;
33 printf("push:%d\n",data);
34 return 0;
35 }
36 /*判断栈是否为空*/
37 int IsStackEmpty(struct Stack *stack)
38 {
39 if(stack->head->next==NULL)
40         return 1;
41 else
42         return 0;
43 }
44 /*出栈函数*/
45 int StackPop(struct Stack *stack,int *data)
46 {
47 if(IsStackEmpty(stack))return -1;
48 struct List *tmp=NULL;
49 tmp=stack->head->next;
50 data=tmp->data;
51 stack->head->next=tmp->next;
52 stack->size--;
53 free(tmp); //释放该栈元素内存块
54 printf("pop:%d \n",data);
55 
56 return 0;
57 }
58 
59 
60 /*主程序,测试栈能否正常工作*/
61 int main(void){
62 int data;
63 struct Stack *stack=StackInit(); //初始化一个載
64 printf("Stack,start run !\n");
65 StackPush(stack,1);
66 StackPush(stack,88);
67 printf("Current Stack Size:%d \n",stack->size);
68 StackPop(stack,&data);
69 StackPop(stack,&data);
70 printf("Current Stack Size:%d \n",stack->size);
71 
72 printf("Stack,finish!\n");
73 return 0;
74 }

 

二、编译运行

1 #gcc stack_c.c -o  out.bin
2 #./out.bin

posted @ 2020-01-14 15:09  XZHDJH  阅读(102)  评论(0)    收藏  举报