c语言链式栈
来源:互联网 发布:76年茅台镇陈酒淘宝 编辑:程序博客网 时间:2024/05/29 03:02
head.h
#include<io.h> /* eof() */#include<math.h> /* floor(),ceil(),abs() */#include<process.h> /* exit() *//* 函数结果状态代码 */#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1/* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */typedef int SElemType;typedef struct StackNode {SElemType data;struct StackNode *next;}StackNode,*StackNodePosition;typedef struct LinkStack{StackNodePosition top;int count;}LinkStack,*PLinkStack;LinkStack *InitStack();//构造一个空栈SStatus Destroy(LinkStack *S);//销毁栈SStatus ClearStack(LinkStack *S);//将S清为空栈Status StackEmpty(LinkStack S);//若栈S为空,则返回TRUE,否则返回FALSEStatus StackLength(LinkStack S);//返回S的元素个数,既栈S的长度Status GetTop(LinkStack S, SElemType *e);//用e返回S的栈顶元素Status Push(LinkStack *S, SElemType e);//插入元素e为新的栈顶元素Status Pop(LinkStack *S, SElemType *e);//删除S的栈顶元素并用e返回其值void StackTraverse(LinkStack S);//从栈底一次输出S中的各个元素数据
FunctionOperate.c
#include "LinkListStack.h"LinkStack *InitStack()//构造一个空栈S{LinkStack *S;S = (PLinkStack)malloc(sizeof(LinkStack));if (S == NULL)return ERROR;S->top = NULL;S->count = 0;return S;}Status Push(LinkStack *S, SElemType e)//插入元素e为新的栈顶元素{StackNode *newspace;newspace = (StackNode*)malloc(sizeof(StackNode));if (newspace == NULL){return ERROR;}newspace->data = e;newspace->next = S->top;S->top = newspace;S->count++;return OK;}Status Destroy(LinkStack *S)//销毁栈S{StackNode *p = S->top;p = p->next;while (p != NULL){free(S->top);S->top = p;p = p->next;}free(S->top);S->count = NULL;return OK;}Status ClearStack(LinkStack *S)//将S清为空栈{StackNode *p = S->top;p = p->next;while (p != NULL){free(S->top);S->top = p;p = p->next;}S->count = 0;}Status StackEmpty(LinkStack S)//若栈S为空,则返回TRUE,否则返回FALSE{if (S.count == 0 || !S.top)return TRUE;elsereturn FALSE;}Status StackLength(LinkStack S)//返回S的元素个数,既栈S的长度{return S.count;}Status GetTop(LinkStack S, SElemType *e)//用e返回S的栈顶元素{if (S.top==NULL)return ERROR;*e = S.top->data;return OK;}Status Pop(LinkStack *S, SElemType *e)//删除S的栈顶元素并用e返回其值{StackNode *p;if (S->top == NULL)return ERROR;*e = S->top->data;p = S->top;S->top = S->top->next;S->count--;free(p);return OK;}void StackTraverse(LinkStack S){if (S.top == NULL)return ERROR;while (S.top != NULL){printf(" %d ",S.top->data);S.top = S.top->next;}}
阅读全文
0 0
- C语言 链式栈
- c语言链式栈
- C语言实现链式栈
- 数据结构--链式栈(C语言)
- 链式栈 C语言数据结构
- 用c语言实现的链式栈
- 数据结构-链式栈-C语言实现
- 链式栈的C语言实现
- C语言栈的链式存储结构
- 栈-链式存储结构-c语言
- 链表实现链式栈 c语言
- C语言反向链式栈的实现
- C语言实现的一个链式栈
- 栈的链式实现(C语言)
- 栈的链式存储实现c语言
- 链式表- C语言
- C语言 链式队列
- C语言实现链式队列
- referer盗链与反盗链
- handle图片切换
- 怎样使用 GitHub?
- iOS面试题--如何在项目中处理页面中的多个网络请求
- eclipse联网总是自动下载xml和jar,如何关闭:window--preference--》【查找download】(可能和maven项目有关)
- c语言链式栈
- Android 各种工
- Android 机型适配问题整理
- localstorage的用法
- 介绍款适用于各种设备上的Microsoft Windows 8和Windows Phone 8(WP8)的Perst嵌入式数据库管理系统 ---来自开发方McObject
- Chrome相关的小知识
- threading注意点(python 版)
- maven安装jar包到本地
- arduino学习笔记2 按键控制LED等和抢答器