数据结构之栈的相关操作

本文详细介绍了栈的顺序存储实现方式及基本操作,包括初始化、判断空、进栈、出栈、获取栈长、遍历栈和清空栈等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原帖地址:http://www.cnblogs.com/zxjie/archive/2013/06/04/3116523.html

  1 //栈的顺序存储相关操作
2 #include<stdio.h>
3 #include<stdlib.h>
4 //#include<string.h>
5 #define MAX 100
6 //定义结构体
7 typedef struct Stack
8 {
9 int *data;
10 int *top;
11 int stacksize;
12 }Stack;
13 //初始化空栈
14 int stackinit(Stack *s)
15 {
16 s->data=(int*)malloc(sizeof(int)*MAX);
17 if(s->data==NULL)
18 {
19 printf("初始化失败!");
20 }
21 s->top=s->data;
22 s->stacksize=MAX;
23 return 0;
24 }
25
26 //判断是否为空
27 int stackisempty(Stack *s)
28 {
29 if(s->data==s->top)
30 {
31 return 1;
32 }
33 else
34 {
35 return 0;
36 }
37 }
38 //进栈
39 int stackpush(Stack *s,int a)
40 {
41 if(s->top-s->data>=s->stacksize)
42 {
43 s->data=(int*)realloc(s->data,sizeof(int)*(MAX+s->stacksize));
44 if(s->data==NULL)
45 {
46 printf("重新分配空间失败!");
47 return 0;
48 }
49 s->stacksize=s->stacksize+MAX;
50 s->top=s->data+MAX;
51 }
52 *s->top=a;
53 s->top++;
54 return 1;
55 }
56 //出栈
57 int stackpop(Stack *s,int *a)
58 {
59 if(stackisempty(s)==1)
60 {
61 printf("出栈失败!");
62 return 0;
63 }
64 else
65 {
66 s->top--;
67 *a=*s->top;
68 return 1;
69 }
70 }
71
72 //返回栈的长度
73 int stacklength(Stack *s)
74 {
75 return (s->top-s->data);
76 }
77 //遍历栈
78 int stacktraverse(Stack *s)
79 {
80 int *s1=NULL;
81 // s1=(int *)malloc(sizeof(int));
82 s1=s->top;
83 if(stackisempty(s)==1)
84 {
85 printf("栈为空!");
86 return 0;
87 }
88 while(--s1!=s->data)
89 {
90 printf("%d ",*s1);
91 }
92 printf("\n");
93 return 1;
94 }
95 //清空栈
96 int stackdestory(Stack *s)
97 {
98 s->top=s->data;
99 return 1;
100 }
101 void main()
102 {
103 int i=0;
104 int a=0;
105 Stack s;
106 stackinit(&s);
107 for(i=0;i<10;i++)
108 {
109 stackpush(&s,i);
110 }
111 printf("length of s :%d\n",stacklength(&s));
112 stacktraverse(&s);
113 stackpop(&s,&a);
114 printf("pop:%d\n",a);
115 stacktraverse(&s);
116 printf("length of s :%d\n",stacklength(&s));
117 printf("s is empty?:%d\n",stackisempty(&s));
118 stackdestory(&s);
119 printf("s is empty?:%d\n",stackisempty(&s));
120 }


 

本文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值