顺序栈的各种基本运算
2012-12-26 13:40
225 查看
这里我们假设栈顶指针指示栈顶元素的提前一个位置
#include <stdio.h> #include <malloc.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef char ElemType; typedef struct { ElemType *base; //栈底指针 ElemType *top; //栈顶指针 int stacksize; }sqstack; void Clearstack(sqstack *s) { free(s->base); } void InitStack(sqstack *s) { s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType)); if ( !s->base) { printf("InitStack error!"); return; } s->top = s->base; s->stacksize = STACK_INIT_SIZE; } void Push(sqstack *s,ElemType e) { if ( s->top - s->base >= s->stacksize) { //指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。 //新的大小一定要大于原来的大小不然的话会导致数据丢失! s->base = (ElemType *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(ElemType)); if ( ! s->base) { printf("Increase memory error!"); return; } s->top = s->base + s->stacksize; s->stacksize += STACKINCREMENT; } *s->top++ = e; } ElemType Pop(sqstack *s) { ElemType x; if ( s->top != s->base) { x = *--s->top; return x; } else { printf("栈为空!\n"); return ('F'); } } int StackLength(sqstack *s) { int i = 0; ElemType *p; p = s->top - 1; do { i++; p--; } while (p != s->base - 1); return i; } int StackEmpty(sqstack *s) { return(s->top == s->base); } ElemType Gettop(sqstack *s) { ElemType e; if ( s->top == s->base ) { printf("栈为空!\n"); return ('F'); } e = *(s->top -1); return e; } void output(sqstack *s) { ElemType *p; p = s->top - 1; do { printf("%c",*p); p--; } while ( p != s->base - 1); printf("\n"); } void main() { ElemType e; sqstack *s; s = (sqstack *)malloc(sizeof(sqstack)); InitStack(s); printf("栈为:%s\n",(StackEmpty(s)?"空":"非空")); Push(s,'v'); Push(s,'o'); Push(s,'y'); Push(s,'e'); Push(s,'v'); Push(s,'o'); Push(s,'l'); Push(s,'i'); printf("栈为:%s\n",(StackEmpty(s)?"空":"非空")); printf("栈长度:%d\n",StackLength(s)); printf("栈顶元素:%c\n",Gettop(s)); output(s); while (!StackEmpty(s)) { e = Pop(s); printf("%c",e); } printf("\n"); printf("栈为:%s\n",(StackEmpty(s)?"空":"非空")); printf("释放栈中...\n"); Clearstack(s); printf("释放栈完成!\n"); }
相关文章推荐
- 实现环形队列各种基本运算的算法(用顺序结构)
- 顺序栈各种基本运算的算法
- 实现顺序表的各种基本运算(利用线性表来实现)
- 实现顺序表各种基本运算算法
- 数据结构 顺序串的各种基本运算
- 实现顺序串各种基本运算的算法
- 编写一个程序,实现顺序环形队列的各种基本运算。
- 实现顺序栈的各种基本运算的算法
- 顺序环形队列的各种基本运算
- 顺序环形队列的各种基本运算
- 实现顺序栈各种基本运算
- 实现顺序表各种基本运算的算法
- 实现顺序栈的各种基本运算的算法
- 顺序表各种基本运算的算法
- 3.1实现顺序栈的各种基本运算
- 编写一个程序,实现顺序表的各种基本运算
- 实现顺序表的各种基本运算
- 顺序循环队列的各种基本运算
- 编写一个程序实现顺序表的各种基本运算(假设顺序表的元数基本类型为Char)
- 顺序表的各种基本运算