数据结构——链式栈
来源:互联网 发布:网络侵权案件的管辖 编辑:程序博客网 时间:2024/06/06 14:09
头文件:
#ifndef __LINKSTACK_H__#define __LINKSTACK_H__#include "error.h"#define FALSE 0#define TRUE 1typedef int StackData;typedef struct _node{ StackData data; struct _node *next;}Node;typedef struct _linkStack{ Node *top;}LinkStack;// 创建栈LinkStack *Create_Stack();// 判栈空否int StackEmpty (LinkStack *s); // 进栈int Push (LinkStack *S, StackData x); // 出栈int Pop (LinkStack *S, StackData *x);// 获取栈顶元素int GetTop (LinkStack *S, StackData *x); // 销毁栈int Destroy(LinkStack *s);#endif //__LINKSTACK_H__
错误信息头文件:
#ifndef __ERROR_H__#define __ERROR_H__#include <stdio.h>#define ERROR -1#define FULL_STACK -2#define EMPTY_STACK -3#define MALLOC_ERROR -4int errno; // 错误号void myError(char *str);char* myStrError(int num);#endif // __ERROR_H__
输出错误信息函数:
#include "error.h"void myError(char *str){ char *msg = myStrError(errno); printf ("%s: %s\n", str, msg);}char* myStrError(int num){ switch (errno) { case ERROR: return "输入参数错误"; case FULL_STACK: return "满栈状态"; case EMPTY_STACK: return "空栈状态"; case MALLOC_ERROR: return "空间分配失败"; }}
功能函数:
#include "LinkStack.h"#include <stdlib.h>LinkStack *Create_Stack(){ LinkStack* s = (LinkStack*)malloc(sizeof(LinkStack)/sizeof(char)); if (s == NULL) { errno = MALLOC_ERROR; return NULL; } // 置空栈 s->top = NULL; return s;}int StackEmpty (LinkStack *s){ if (s == NULL) { errno = ERROR; return FALSE; } return s->top == NULL;}int Push (LinkStack *s, StackData x){ if (s == NULL) { errno = ERROR; return FALSE; } // 新建结点 Node* node = (Node*)malloc(sizeof(Node)/sizeof(char)); if (node == NULL) { errno = MALLOC_ERROR; return FALSE; } node->data = x; node->next = s->top; s->top = node; return TRUE;}int Pop (LinkStack *s, StackData *x){ if (s == NULL) { errno = ERROR; return FALSE; } if (StackEmpty(s)) { errno = EMPTY_STACK; return FALSE; } Node *p = s->top; *x = p->data; s->top = p->next; free(p); return TRUE;}int GetTop (LinkStack *s, StackData *x){ if (s == NULL) { errno = ERROR; return FALSE; } if (StackEmpty(s)) { errno = EMPTY_STACK; return FALSE; } *x = s->top->data; return TRUE;}// 销毁栈int Destroy(LinkStack *s){ if (s == NULL) { errno = ERROR; return FALSE; } int x; while(StackEmpty(s) != TRUE) { Pop (s, &x); } free(s); return TRUE;}
main函数:
#include <stdio.h>#include "LinkStack.h"int main(){ LinkStack *s = Create_Stack(); if (s == NULL) { myError ("Create_Stack"); return -1; } if (StackEmpty(s)) { printf ("空栈\n"); } int x; if (Pop(s, &x) != TRUE) { myError ("Pop 错误"); } int i; for (i = 0; i < 10; i++) { Push(s, i); } char str[100]; for (i = 0; i < 12; i++) { if (Pop (s, &x) != TRUE) { sprintf (str, "Pop第%d个元素", i); myError (str); } printf ("x : %d\n", x); } if (Destroy(s) == FALSE) { myError ("Destroy"); } return 0;}
阅读全文
0 0
- 数据结构——链式栈
- 数据结构——链式栈
- 数据结构——链式栈(c++)
- 数据结构——栈之链式存储
- 数据结构小结——链式栈
- 数据结构——链式基数排序
- 数据结构——链式队列
- 数据结构—链表-链式存储
- 数据结构(五)——双链表、链式栈、链式队列 及实现
- 数据结构(三)——双链表、链式栈、链式队列 及实现
- C++ —— 数据结构之 顺序栈,链式栈?
- 数据结构之线性表——栈的链式存储
- 第六篇:基本数据结构——栈的链式表示
- 数据结构——链式栈模板类实现
- 数据结构——链式二叉树
- 数据结构——串的链式存储
- 数据结构——链式队列(c++)
- 数据结构——队列之链式存储
- layer获取弹框中输入框的值
- Freemarker自定义标签+spring国际化所碰到的坑
- 嵌入式软件工程师待遇
- 落单的数
- 有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
- 数据结构——链式栈
- JAVA-------反射
- Java集合之HashSet
- java基础复习--复习总结8
- Linux平台延时之sleep、usleep、nanosleep、select比较
- Git- [!remote rejected]:refusing to delete the current branch
- JNI使用
- c语言malloc函数
- nginx 的location详细理解