C语言中用链表构建栈讲解,C语言数据结构之使用链表模拟栈的实例

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

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

1. 用C语言实现的版本

#include

#include

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();

}

运行结果如下图所示:

8f39015a93d939377151e7bf0ae7399a.png

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

时间: 2017-08-27

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值