C语言栈结构实现
2015-11-14 14:34
429 查看
由于各种各样的原因,时隔半年,再也没碰过数据结构,现在一方面为明年考研做准备另一方面也是科研需要提升自己的编程能能力,现在重新继续数据结构的学习,选择的教材是严蔚敏老师的C语言数据结构,I will be a sticker!
栈结构实现
stack.h
stack.c
main.c
栈结构实现
stack.h
#ifndef __STACK_H #define __STACK_H #define STACK_INIT_SIZE 100 //栈初始化大小 #define STACK_INCREAMENT 10//栈增加大小 #define OVERFLOW -1 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef unsigned char u8; typedef struct{ int id; }SElemType; typedef struct{ SElemType *base;//栈底指针 SElemType *top;//栈顶指针 int stacksize;//指示当前可用最大容量 }SqStack; u8 InitStack(SqStack *S); u8 DestoryStack(SqStack *S); u8 ClearStack(SqStack *S); u8 StackEmpty(SqStack *S); int StackLenth(SqStack *S); u8 GetTop(SqStack *S,SElemType *e); u8 Push(SqStack *S,SElemType *e); u8 Pop(SqStack *S,SElemType *e); u8 StackTraverse(SqStack *S,u8(*visit)()); #endif
stack.c
#include "stack.h" #include "stdlib.h" //顺序栈结构 //初始化栈 u8 InitStack(SqStack *S) { S->base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S->base) exit(OVERFLOW); S->top = S->base; S->stacksize = STACK_INIT_SIZE; return OK; } //销毁栈 u8 DestoryStack(SqStack *S) { if(!S->base) return ERROR; S->top = NULL; S->stacksize = 0; free(S->base); return OK; } //清空栈 u8 ClearStack(SqStack *S) { if(!S->base) return ERROR; S->top = S->base; return OK; } u8 StackEmpty(SqStack *S) { if(!S->base) return ERROR; if(S->base==S->top) return TRUE; else return FALSE; } int StackLenth(SqStack *S) { int len=0; if(!S->base) return FALSE; SElemType *p = S->base; while(p!=S->top) { len++;p++; } return len ; } u8 GetTop(SqStack *S,SElemType *e) { if(!S->base||(S->top == S->base)) return ERROR; *e = *(S->top-1); return OK; } //入栈 u8 Push(SqStack *S,SElemType *e) { if(S->top-S->base>=S->stacksize)//栈内存不足 { S->base = (SElemType*)realloc(S->base,(S->stacksize+STACK_INCREAMENT)*sizeof(SElemType)); if(!S->base) exit(OVERFLOW);//内存分配失败 S->top = S->base + S->stacksize; S->stacksize += STACK_INCREAMENT; } *S->top++ = *e; return OK; } //出栈 u8 Pop(SqStack *S,SElemType *e) { if(S->top==S->base)//栈空 return ERROR; *e = *--S->top; return OK; } u8 StackTraverse(SqStack *S,u8(*visit)()) { return OK; }
main.c
#include "stack.h" #include "stdio.h" int main() { u8 i; SqStack S; int num = 10; SElemType es[num]; SElemType e; InitStack(&S); if(StackEmpty(&S)) printf("栈为空\n"); printf("-----------------------------\n"); for(i = 0;i<num;i++) { es[i].id = i; } for(i = 0;i<num;i++) { printf("%d\n",es[i].id); } printf("-----------------------------\n"); for(i = 0;i<num;i++) { Push(&S,&es[i]); GetTop(&S,&e); printf("当前入栈元素ID:%d\n",e.id); } printf("栈长度:%d\n", StackLenth(&S)); printf("-----------------------------\n"); printf("出栈:\n"); for(i = 0;i<num;i++) { Pop(&S,&e); printf("当前出栈元素ID:%d\n",e.id); } ClearStack(&S); if(StackEmpty(&S)) printf("已清空栈\n"); if(DestoryStack(&S)) { printf("已经销毁栈"); } return 0; }
相关文章推荐
- Linux C函数参考手册(PDF版)
- Lua教程(十七):C API简介
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- C#实现打造气泡屏幕保护效果
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- 利用C语言来求最大连续子序列乘积的方法
- 数据结构之Treap详解
- 字符串的组合算法问题的C语言实现攻略
- C 语言基础教程(我的C之旅开始了)[三]
- C++中的extern “C”用法详解
- C 语言基础教程(我的C之旅开始了)[七]
- 最大子矩阵问题实例解析
- C字符串操作函数实现方法小结
- C语言中static的作用及C语言中使用静态函数有何好处
- 字典树的基本知识及使用C语言的相关实现
- 详解C语言中free()函数与getpagesize()函数的使用