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语言数据结构之使用链表模拟栈的实例 的全部内容, 来源链接: utcz.com/z/324711.html

回到顶部