含表头的栈ADT(C语言版)
来源:互联网 发布:tda分析软件正版费用 编辑:程序博客网 时间:2024/05/29 08:16
表头S为指针,指向一个结构体,S->next表示S指向的结构体中的结构的next域,这个next存储的是栈顶的地址,所以S->next表示栈顶地址,所以S->next->element表示栈顶的元素中的值。
具体代码如下:
#ifndef MYSTACK_H_#define MYSTACK_H_#include <stdio.h>#include <stdbool.h>#include <malloc.h> struct Node;typedef struct Node * Stack; //用于声明指向表头的指针 typedef struct Node * PtrToNode; //用于声明指向结构体(节点)的指针 typedef int ElementType;struct Node{ElementType element;PtrToNode next;//前一个节点(元素)地址 };//函数声明 Stack InitStack(void);//创建一个空栈,返回表头地址 bool IsEmpty(Stack S); //判断是否为空 空返回trueStack Pop(Stack S);// 出栈 返回新栈顶地址void ClearStack(Stack S); //清空栈 变为空栈 int StackLength(Stack S); //返回栈中元素数目 ElementType GetTop(Stack S);//返回栈顶的值Stack Push(ElementType E, Stack S);// 入栈 返回新栈顶地址 //函数实现Stack InitStack(void){Stack tempNode;tempNode = (PtrToNode)malloc(sizeof(struct Node));if(tempNode == NULL)printf("Out of space!\n");tempNode -> next = NULL;return tempNode;}bool IsEmpty(Stack S){return S -> next == NULL;}Stack Pop(Stack S){PtrToNode tempNode; if(IsEmpty(S)){printf("Stack is empty\n");return S;}else{tempNode = S -> next;S -> next = S -> next -> next; //S为表头地址,表头的next存的是栈顶的地址 free(tempNode); //栈底元素的next为NULL 所以在删除最后一个元素后 return S; //S的next才为NULL }}void ClearStack(Stack S){while(IsEmpty(S) != true)S = Pop(S);}int StackLength(Stack S){int sum = 0;while(IsEmpty(S) != true){S -> next = S -> next -> next;sum ++;}return sum;}ElementType GetTop(Stack S){if(IsEmpty(S)){printf("Stack is empty\n");return 0; //返回值防止编译器报错 }else return S -> next -> element;}Stack Push(ElementType E, Stack S){PtrToNode tempNode;tempNode = (PtrToNode)malloc(sizeof(struct Node));if(tempNode == NULL){printf("Out Of Space!\n");return tempNode;}else{tempNode -> next = S -> next;tempNode -> element = E;S -> next = tempNode;return S;}}#endif
0 0
- 含表头的栈ADT(C语言版)
- 含表头的链表ADT(C语言版)
- 以循环顺序表实现的队列ADT(C语言版)
- 栈的实现(C语言版)
- 栈的数组实现(C语言版)
- 顺序栈(C语言版)
- 顺序栈的实现 C语言版(一)
- 顺序栈的实现 C语言版(二)
- 顺序栈的实现 C语言版(二)
- 数据结构之对顺序栈的操作(C语言版)
- 栈的链表实现(C语言版)
- 栈的基本操作(附带一个数据结构、C语言版)
- 线性规划的源程序(c语言版)
- 清华大学出版社 数据结构(C语言版)的实现
- 最小堆的实现(C 语言版)
- n 的阶乘 C 语言版(大数)
- sms4的简单实现(C语言版)
- 树的基本算法(C语言版)
- jQuery源码之动画详解
- 怎样输出一个整数的二进制码
- JAVA学习之Servlet
- HDU 4500--小Q系列故事——屌丝的逆袭
- hive优化之------控制hive任务中的map数和reduce数
- 含表头的栈ADT(C语言版)
- 转载08:(译)如何恰当地学习 JavaScript(6-8周)
- 穷举递归和回溯算法
- Activity生命周期及创建模式
- sqoop操作与使用
- B树 (插入操作)
- 使用Jquery解析Json基础知识
- Jquery插件实现点击获取验证码后60秒内禁止重新获取
- 保持专注