数据结构示例之使用链表模拟栈

来源:互联网 发布:ubuntu tty7 编辑:程序博客网 时间:2024/05/24 05:17

以下是“使用链表模拟栈”的简单示例:

1. 用c语言实现的版本

#include<stdio.h>#include<stdlib.h>typedef char datatype;typedefstruct node{datatype data;struct node  *next;} stack;stack*m_stack = NULL;/* 创建链表,从表头插入新元素 */void creat(void);/* 使栈s为空 */void MakeNull();/* 判断栈是否为空 */bool Empty();//取出栈顶元素 int Top(datatype* value);//弹出栈顶元素void Pop();//入栈,在头部插入新元素void Push(datatype x);/* 创建链表,从表头插入新元素 */void creat(){char ch;printf("请输入字符序列:\n");ch = getchar();while (ch != '\n'){Push(ch);ch = getchar();}}/* 使栈s为空 */void MakeNull(){stack *p = m_stack;while (p != NULL){m_stack = m_stack->next;free(p);/*释放空间*/p = m_stack;}}/* 判断栈是否为空 */bool Empty(){return (m_stack == NULL);}//取出栈顶元素 int Top(datatype* value){if (Empty())/*s为空栈,直接跳出,提示出错信息*/{return -1;}else{*value = m_stack->data;return 1;}}//弹出栈顶元素void Pop(){stack *p;if (Empty()) /*s为空栈,直接跳出,提示出错信息*/{printf("不能弹出,栈为空.");}else{p = m_stack;;m_stack = m_stack->next;free(p);/*释放栈顶空间*/printf("弹出成功\n");}}//入栈,在头部插入新元素void Push( datatype x){stack *p;p = (stack*)malloc(sizeof(stack));p->data = x;p->next = m_stack;m_stack = p;}void main(){char m_top;/* 创建链表,从表头插入新元素 */creat();if (!Empty()) //判断栈是否为空{int res = Top(&m_top);if (res == -1){printf("栈为空,未能获取栈顶元素\n");}else{printf("栈顶元素为: %c\n", m_top);}Pop();}else{printf("栈为空\n");}MakeNull();}

运行结果如下图所示:


0 0
原创粉丝点击