数据结构和算法--栈的数组实现

来源:互联网 发布:王者荣耀网络不稳定 编辑:程序博客网 时间:2024/06/06 09:49
//栈的顺序存储(与顺序表类似)#include <stdio.h>#include <stdlib.h>#define N 32//定义数据类型typedef int datatype_t;//定义结构体typedef struct {datatype_t data[N];int top;}seqstack_t;//创建一个空的栈seqstack_t *seqstack_create(){seqstack_t *s;s = (seqstack_t *)malloc(sizeof(seqstack_t));//s->top = 0;s->top = -1;return s;}//判断栈是否为满int seqstack_full(seqstack_t *s){//return s->top == N ? 1 : 0;return s->top == N - 1 ? 1 : 0; }//判断栈是否为空int seqstack_empty(seqstack_t *s){//return s->top == 0 ? 1 : 0;return s->top == -1 ? 1 : 0;}//入栈(压栈)int seqstack_push(seqstack_t *s, datatype_t value){if(seqstack_full(s)){printf("seqstack is full\n");return -1;}//s->data[s->top] = value;//s->top++;s->top++;s->data[s->top] = value;return 0;}//打印数据int seqstack_show(seqstack_t *s){int i = 0;#if 0for(i = 0; i < s->top; i++){printf("%d ", s->data[i]);}putchar(10);#endif#if 1for(i = 0; i <= s->top; i++){printf("%d ", s->data[i]);}#endifputchar(10);return 0;}//出栈(弹栈)datatype_t seqstack_pop(seqstack_t *s){datatype_t value;if(seqstack_empty(s)){printf("seqstack is empty\n");return -1;}#if 0s->top--;value = s->data[s->top];#endif#if 1value = s->data[s->top];s->top--;#endifreturn value;}int main(int argc, const char *argv[]){seqstack_t *s = seqstack_create();seqstack_push(s, 10);seqstack_push(s, 20);seqstack_push(s, 30);seqstack_push(s, 40);seqstack_push(s, 50);seqstack_show(s);printf("%d\n", seqstack_pop(s));seqstack_show(s);printf("%d\n", seqstack_pop(s));seqstack_show(s);printf("%d\n", seqstack_pop(s));seqstack_show(s);printf("%d\n", seqstack_pop(s));seqstack_show(s);printf("%d\n", seqstack_pop(s));seqstack_show(s);printf("%d\n", seqstack_pop(s));seqstack_show(s);return 0;}

0 0
原创粉丝点击