首页
IT
登录
6mi
u
盘
搜
搜 索
IT
第五周项目2——建立链栈算法库
第五周项目2——建立链栈算法库
xiaoxiao
2023-03-28
6
/*
* Copyright (c)2016,烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:wu.cpp
* 作 者:武昊
* 完成日期:2016年9月29日
* 版 本 号:v1.0
*问题描述:定义链栈存储结构,实现其基本运算,并完成测试。
*输入描述:无
*程序输出:测试数据
*/
lintack.h
#include <stdio.h>
#include <malloc.h>
typedef
char
ElemType;
typedef
struct
linknode
{
ElemType data;
//数据域
struct
linknode *next;
//指针域
} LiStack;
//链栈类型定义
void
InitStack(LiStack *&s);
//初始化栈
void
DestroyStack(LiStack *&s);
//销毁栈
int
StackLength(LiStack *s);
//返回栈长度
bool
StackEmpty(LiStack *s);
//判断栈是否为空
void
Push(LiStack *&s,ElemType e);
//入栈
bool
Pop(LiStack *&s,ElemType &e);
//出栈
bool
GetTop(LiStack *s,ElemType &e);
//取栈顶元素
void
DispStack(LiStack *s);
//输出栈中元素
listack.cpp
//链栈基本运算函数
#include "listack.h"
void
InitStack(LiStack *&s)
//初始化栈
{
s=(LiStack *)malloc(
sizeof
(LiStack));
s->next=NULL;
}
void
DestroyStack(LiStack *&s)
//销毁栈
{
LiStack *p=s->next;
while
(p!=NULL)
{
free(s);
s=p;
p=p->next;
}
free(s);
//s指向尾结点,释放其空间
}
int
StackLength(LiStack *s)
//返回栈长度
{
int
i=0;
LiStack *p;
p=s->next;
while
(p!=NULL)
{
i++;
p=p->next;
}
return
(i);
}
bool
StackEmpty(LiStack *s)
//判断栈是否为空
{
return
(s->next==NULL);
}
void
Push(LiStack *&s,ElemType e)
//入栈
{
LiStack *p;
p=(LiStack *)malloc(
sizeof
(LiStack));
p->data=e;
//新建元素e对应的节点*p
p->next=s->next;
//插入*p节点作为开始节点
s->next=p;
}
bool
Pop(LiStack *&s,ElemType &e)
//出栈
{
LiStack *p;
if
(s->next==NULL)
//栈空的情况
return
false
;
p=s->next;
//p指向开始节点
e=p->data;
s->next=p->next;
//删除*p节点
free(p);
//释放*p节点
return
true
;
}
bool
GetTop(LiStack *s,ElemType &e)
//取栈顶元素
{
if
(s->next==NULL)
//栈空的情况
return
false
;
e=s->next->data;
return
true
;
}
void
DispStack(LiStack *s)
//输出栈中元素
{
LiStack *p=s->next;
while
(p!=NULL)
{
printf(
"%c "
,p->data);
p=p->next;
}
printf(
"\n"
);
}
main.cpp
#include "listack.h"
int
main()
{
ElemType e;
LiStack *s;
printf(
"(1)初始化链栈s\n"
);
InitStack(s);
printf(
"(2)链栈为%s\n"
,(StackEmpty(s)?
"空"
:
"非空"
));
printf(
"(3)依次进链栈元素a,b,c,d,e\n"
);
Push(s,
'a'
);
Push(s,
'b'
);
Push(s,
'c'
);
Push(s,
'd'
);
Push(s,
'e'
);
printf(
"(4)链栈为%s\n"
,(StackEmpty(s)?
"空"
:
"非空"
));
printf(
"(5)链栈长度:%d\n"
,StackLength(s));
printf(
"(6)从链栈顶到链栈底元素:"
);DispStack(s);
printf(
"(7)出链栈序列:"
);
while
(!StackEmpty(s))
{ Pop(s,e);
printf(
"%c "
,e);
}
printf(
"\n"
);
printf(
"(8)链栈为%s\n"
,(StackEmpty(s)?
"空"
:
"非空"
));
printf(
"(9)释放链栈\n"
);
DestroyStack(s);
return
0;
}
运行结果:
知识点总结:
链表算法库是链栈算法库的基础,应用方法类似。
转载请注明原文地址: https://ju.6miu.com/read-1209427.html
最新回复
(
0
)