C语言数据结构之使用链表模拟栈的实例

 更新时间:2017年08月28日 09:57:11   作者:爱思考的小鸟  
这篇文章主要介绍了C语言数据结构之使用链表模拟栈的实例的相关资料,需要的朋友可以参考下

C语言数据结构之使用链表模拟栈的实例

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

1. 用C语言实现的版本

#include<stdio.h> 
#include<stdlib.h> 
 
typedef char datatype; 
typedef struct 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(); 
} 

运行结果如下图所示:

以上就是数据结构链表模拟栈的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • 使用C语言判断英文字符大小写的方法

    使用C语言判断英文字符大小写的方法

    这篇文章主要介绍了使用C语言判断英文字符大小写的方法,分别为isupper()函数和islower()函数的使用,需要的朋友可以参考下
    2015-08-08
  • C语言实现推箱子项目

    C语言实现推箱子项目

    这篇文章主要为大家详细介绍了C语言实现推箱子项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • C++实现聊天程序

    C++实现聊天程序

    这篇文章主要为大家详细介绍了C++实现类似QQ聊天程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C++实现LeetCode(倒置链表)

    C++实现LeetCode(倒置链表)

    这篇文章主要介绍了C++实现LeetCode(倒置链表),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C/C++中提高查找速度的小技巧

    C/C++中提高查找速度的小技巧

    这篇文章主要给大家介绍了C/C++中提高数组中查找某个元素或者字符串中查找某个字符效率的小技巧,提高速度对我们日常开发来说还是很有用的,文中给出了详细的示例代码,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • 面向对象三大特性的意义讲解

    面向对象三大特性的意义讲解

    今天小编就为大家分享一篇关于面向对象三大特性的意义讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • C++稀疏矩阵的各种基本运算并实现加法乘法

    C++稀疏矩阵的各种基本运算并实现加法乘法

    今天小编就为大家分享一篇关于C++稀疏矩阵的各种基本运算并实现加法乘法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • C语言矩阵连乘 (动态规划)详解

    C语言矩阵连乘 (动态规划)详解

    这篇文章主要介绍了C语言矩阵连乘 (动态规划)详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • c++实现跳跃表(Skip List)的方法示例

    c++实现跳跃表(Skip List)的方法示例

    跳表(skiplist)是一个非常优秀的数据结构,实现简单,插入、删除、查找的复杂度均为O(logN),下面这篇文章主要介绍了c++实现跳跃表(Skip List)的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-09-09
  • Cocos2d-x UI开发之文本类使用实例

    Cocos2d-x UI开发之文本类使用实例

    这篇文章主要介绍了Cocos2d-x学习笔记之文本类,文本类是UI开发中经常使用的,本文用详细的代码注释讲解了文本类的使用,需要的朋友可以参考下
    2014-09-09

最新评论