链栈的基本操作
2017-04-12 21:29
204 查看
实验题目:链栈的基本操作
• 实验目的:理解并掌握栈和队列的逻辑结构和存储结构;
• 理解栈和队列的相关基本运算;
• 编程对相关算法进行验证;
学会利用栈和队列解决实际问题
• 实验内容:编写一个程序,实现链栈的各种基本运算,并在此基础上设计一个主程序完成如下功能:
• (1)初始化栈s;
• (2)判断栈s是否为空;
• (3)依次进栈元素10,-2,10,-3,15,12;
• (4)判断栈s是否为空;
• (5)输出栈长度;
• (6)输出从栈顶到栈底的元素;
• (7)输出出栈序列;
• (8)判断栈s是否为空。
头文件
#ifndef STACKS_H_INCLUDED
#define STACKS_H_INCLUDED
#include <bits/stdc++.h>
using namespace std; //cout,cin
//函数结果状态代码
#define SElemType int
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
//OVERFLOW 在 math.h 中已定义为3
typedef int Status;
typedef int Boolean; // 布尔类型
//为了操作的方便,建议本书每一个程序都把c1.h包含进去
typedef struct LNode
{
SElemType data;
struct LNode *next;
}LNode ,*LinkStack;
Status InitLinkStack(LinkStack &L);
Status LinkStackEmpty(LinkStack &L);
int Li
4000
nkStackLength(LinkStack &L);
Status HeadInsert(LinkStack &L,SElemType e);
Status DeleteFirst(LinkStack &L,SElemType &e);
Status LinkStackTraverse(LinkStack &L);
Status visit(SElemType c);
#endif // STACKS_H_INCLUDED
程序构造程序
#include "stacks.h"
#include <malloc.h>
#include <iostream>
using namespace std;
Status InitLinkStack(LinkStack &L)
{
L=(LinkStack)malloc(sizeof(LNode)); /* 产生头结点,并使S指向此头结点 */
if(!L) /* 存储分配失败 */
exit(OVERFLOW);
L->next=NULL; /* 指针域为空 */
return OK;
}
Status LinkStackEmpty(LinkStack &L)
{ /* 若栈S为空栈,则返回TRUE,否则返回FALSE */
if(L->next==NULL)
return TRUE;
else
return FALSE;
}
int LinkStackLength(LinkStack &L)
{
int i=0;
LinkStack p=L->next;
while(p)
{
++i;
p=p->next;
}
return i;
}
Status HeadInsert(LinkStack &L,SElemType e)
{
LinkStack s;
s=(LinkStack)malloc(sizeof(LNode)); /* 生成新结点 */
s->data=e; /* 给结点赋值 */
s->next=L->next; /* 插在表头 */
L->next=s;
return OK;
}
Status DeleteFirst(LinkStack &L,SElemType &e)
{
LinkStack p=L->next;
if(p)
{
e=p->data;
L->next=p->next;
free(p);
return OK;
}
else
return ERROR;
}
Status LinkStackTraverse(LinkStack &L)
{
LinkStack p=L->next;
while(p)
{
visit(p->data);
p=p->next;
}
cout<<endl;
return OK;
}
Status visit(SElemType c)
{
cout<<c<<" ";
return OK;
}
主程序
#include "stacks.h"
#include <iostream>
using namespace std;
int main()
{
LinkStack S;
SElemType e;
cout << "①初始化栈S:"<< endl;
InitLinkStack(S);
cout << "②判断栈S是否为空:"<< endl;
if(LinkStackEmpty(S))cout << "空"<<endl;
else cout <<"不空"<< endl;
cout << "③依次进栈元素:10 -2 10 -3 15 12";
HeadInsert(S,10);
HeadInsert(S,-2);
HeadInsert(S,10);
HeadInsert(S,-3);
HeadInsert(S,15);
HeadInsert(S,12);
cout << endl;
cout << "④判断栈S是否为空:"<< endl;
if(LinkStackEmpty(S))cout << "空"<<endl;
else cout <<"不空"<< endl;
cout << "⑤输出栈长度:"<< LinkStackLength(S) << endl;
cout << "⑥输出从栈顶到栈底的元素:";
LinkStackTraverse(S);
cout << "⑦输出出栈序列:";
for(int i = 1;i <= 6;i++)
{
DeleteFirst(S,e);
cout << e << " ";
}
cout << endl;
cout << "⑧判断S是否为空:"<< endl;
if(LinkStackEmpty(S))cout << "空"<<endl;
else cout <<"不空"<< endl;
return 0;
}
结果截图
• 实验目的:理解并掌握栈和队列的逻辑结构和存储结构;
• 理解栈和队列的相关基本运算;
• 编程对相关算法进行验证;
学会利用栈和队列解决实际问题
• 实验内容:编写一个程序,实现链栈的各种基本运算,并在此基础上设计一个主程序完成如下功能:
• (1)初始化栈s;
• (2)判断栈s是否为空;
• (3)依次进栈元素10,-2,10,-3,15,12;
• (4)判断栈s是否为空;
• (5)输出栈长度;
• (6)输出从栈顶到栈底的元素;
• (7)输出出栈序列;
• (8)判断栈s是否为空。
头文件
#ifndef STACKS_H_INCLUDED
#define STACKS_H_INCLUDED
#include <bits/stdc++.h>
using namespace std; //cout,cin
//函数结果状态代码
#define SElemType int
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
//OVERFLOW 在 math.h 中已定义为3
typedef int Status;
typedef int Boolean; // 布尔类型
//为了操作的方便,建议本书每一个程序都把c1.h包含进去
typedef struct LNode
{
SElemType data;
struct LNode *next;
}LNode ,*LinkStack;
Status InitLinkStack(LinkStack &L);
Status LinkStackEmpty(LinkStack &L);
int Li
4000
nkStackLength(LinkStack &L);
Status HeadInsert(LinkStack &L,SElemType e);
Status DeleteFirst(LinkStack &L,SElemType &e);
Status LinkStackTraverse(LinkStack &L);
Status visit(SElemType c);
#endif // STACKS_H_INCLUDED
程序构造程序
#include "stacks.h"
#include <malloc.h>
#include <iostream>
using namespace std;
Status InitLinkStack(LinkStack &L)
{
L=(LinkStack)malloc(sizeof(LNode)); /* 产生头结点,并使S指向此头结点 */
if(!L) /* 存储分配失败 */
exit(OVERFLOW);
L->next=NULL; /* 指针域为空 */
return OK;
}
Status LinkStackEmpty(LinkStack &L)
{ /* 若栈S为空栈,则返回TRUE,否则返回FALSE */
if(L->next==NULL)
return TRUE;
else
return FALSE;
}
int LinkStackLength(LinkStack &L)
{
int i=0;
LinkStack p=L->next;
while(p)
{
++i;
p=p->next;
}
return i;
}
Status HeadInsert(LinkStack &L,SElemType e)
{
LinkStack s;
s=(LinkStack)malloc(sizeof(LNode)); /* 生成新结点 */
s->data=e; /* 给结点赋值 */
s->next=L->next; /* 插在表头 */
L->next=s;
return OK;
}
Status DeleteFirst(LinkStack &L,SElemType &e)
{
LinkStack p=L->next;
if(p)
{
e=p->data;
L->next=p->next;
free(p);
return OK;
}
else
return ERROR;
}
Status LinkStackTraverse(LinkStack &L)
{
LinkStack p=L->next;
while(p)
{
visit(p->data);
p=p->next;
}
cout<<endl;
return OK;
}
Status visit(SElemType c)
{
cout<<c<<" ";
return OK;
}
主程序
#include "stacks.h"
#include <iostream>
using namespace std;
int main()
{
LinkStack S;
SElemType e;
cout << "①初始化栈S:"<< endl;
InitLinkStack(S);
cout << "②判断栈S是否为空:"<< endl;
if(LinkStackEmpty(S))cout << "空"<<endl;
else cout <<"不空"<< endl;
cout << "③依次进栈元素:10 -2 10 -3 15 12";
HeadInsert(S,10);
HeadInsert(S,-2);
HeadInsert(S,10);
HeadInsert(S,-3);
HeadInsert(S,15);
HeadInsert(S,12);
cout << endl;
cout << "④判断栈S是否为空:"<< endl;
if(LinkStackEmpty(S))cout << "空"<<endl;
else cout <<"不空"<< endl;
cout << "⑤输出栈长度:"<< LinkStackLength(S) << endl;
cout << "⑥输出从栈顶到栈底的元素:";
LinkStackTraverse(S);
cout << "⑦输出出栈序列:";
for(int i = 1;i <= 6;i++)
{
DeleteFirst(S,e);
cout << e << " ";
}
cout << endl;
cout << "⑧判断S是否为空:"<< endl;
if(LinkStackEmpty(S))cout << "空"<<endl;
else cout <<"不空"<< endl;
return 0;
}
结果截图
相关文章推荐
- 14.线性表之链栈的基本操作
- 顺序栈和链栈的基本操作
- 数据结构中栈的链式结构—链栈的基本操作
- 数据结构 - 链栈的基本操作(C语言)
- 顺序栈、链栈基本操作
- 顺序栈、链栈基本操作
- 顺序栈、链栈基本操作
- 链栈的基本操作
- 链栈基本操作
- 链表,顺序表,链队,链栈,顺序队,顺序栈,二叉树的基本操作函数
- 顺序栈、链栈基本操作
- 数据结构的链栈基本操作
- 栈-链栈的基本操作及实现
- 实验4:栈和队列的基本操作实现及其应用——链栈
- 数据结构 - C语言版 - 链栈 所有基本操作
- 顺序栈、链栈基本操作
- 6-5 链栈的基本操作(10 分)PTA无法评测但是感觉写的符合要求
- 顺序栈、链栈基本操作
- 实验4:栈和队列的基本操作实现及其应用之《链栈》
- 顺序栈、链栈基本操作