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


浙公网安备 33010602011771号