您的位置:首页 > 其它

链栈的基本操作

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;
}


结果截图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: