栈的基本操作主要包括栈的创建,压栈,出栈以及获取栈顶元素等,如果是使用动态分配实现的,要在程序后面free掉malloc或者alloc的堆空间,否则容易引起内存泄露导致程序失败。
1 #include <stdio.h>2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <malloc.h>
5 #define MAX 50
6 typedef struct stack{
7 int array[MAX];
8 int *base;
9 int *top;
10 }stack,*seqstack;
11 seqstack Init_stack(){
12 seqstack temp = (seqstack)malloc(sizeof(stack));
13 temp->base = temp->array;
14 temp->top = temp->base;
15 return temp;
16 }
17 int push(seqstack temp,int val){
18 if(temp->top - temp->base < MAX-1){
19 *temp->top = val;
20 temp->top++;
21 return 0;
22 }
23 else
24 printf("stack full\n");
25 return -1;
26 }
27 int pop(seqstack temp){
28 if(temp->base == temp->top){
29 printf("stack empty\n");
30 return -1;
31 }
32 temp->top--;
33 return 0;
34 }
35 int gettop(seqstack temp){
36 if(temp->top == temp->base){
37 printf("stack is empty\n");
38 return -1;
39 }
40 return *(temp->top-1);
41 }
42 int main(){
43 int value;
44 int *ptr;
45 seqstack seq;
46 if((seq = Init_stack()) == NULL)
47 printf("Init_stack failed\n");
48 while(scanf("%d",&value) == 1&&value != -1){
49 if(push(seq,value) < 0)
50 break;
51 }
52 for(ptr = seq->top-1;ptr-seq->base >= 0;ptr--)
53 printf("%d ",*ptr);
54 printf("\n");
55 if(pop(seq) < 0)
56 printf("pop failed\n");
57 for(ptr = seq->top-1;ptr-seq->base >= 0;ptr--)
58 printf("%d ",*ptr);
59 printf("\n");
60 free(seq);
61 return 0;
62 }
程序从标准输入获取数值,以-1结束,打印栈中数值,出栈一个元素后再次打印栈中的数值,free函数调用过后函数退出,程序比较简单,如果哪里需要优化希望大家多多指教。