栈是一种只能在一端进行操作的线性数据结构,数据的修改按后进先出(LIFO)原则进行。
以下是代码:
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #define OK 0 #define ERROR -1 #define OVERFLOW 1 #define STACK_INIT_SIZE 50 #define STACK_INCREMENT 10 typedef struct stack{ int *base; //栈底指针 int *top; //栈顶指针 int stack_size; //栈的存储空间大小 }sq_stack; int init_stack(sq_stack *s) { s->base = (int*)malloc(sizeof(int)); if(!s->base) exit(OVERFLOW); s->top = s->base; s->stack_size = STACK_INIT_SIZE; return OK; } int push(sq_stack *s, int elem) { //首先判断栈是否满 if ( (s->top - s->base) >= s->stack_size ) { s->base = (int*)realloc(s->base, (STACK_INCREMENT + s->stack_size) *sizeof(int) ); if(!s->base) exit(OVERFLOW); s->top = (s->base + s->stack_size); s->stack_size += STACK_INCREMENT; } *s->top = elem; s->top++; return OK; } int pop(sq_stack *s, int *elem) { if (s->base == s->top) return ERROR; *elem = *(--s->top); return OK; } int get_top(sq_stack s, int *elem) { if (s.base == s.top) return ERROR; *elem = *(s.top-1); return OK; } int get_length(sq_stack s) { return (s.top -s.base); } int main() { sq_stack s; int i, elem; init_stack(&s); //进栈 for(i = 1; i < 10; i++) { push(&s, i); printf("%3d", i); } printf("\n"); //出栈 for(i = 1; i < 10; i++) { pop(&s, &elem); printf("%3d", elem); } printf("\n"); return OK; }
本文出自 “兵疯千里” 博客,请务必保留此出处http://slientradio.blog.51cto.com/7241495/1390771
原文:http://slientradio.blog.51cto.com/7241495/1390771