实验二之静态链表
来源:互联网 发布:985 211文件失效 知乎 编辑:程序博客网 时间:2024/05/17 09:09
《数据结构》实验二:
线性表综合实验
一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二.实验时间
准备时间为第3周到第4周,具体集中实验时间为第4周第2次课。2个学时。
三..实验内容
1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
要求如下:
1)用顺序表来实现。
2)用单链表来实现。
3)用双链表实现。
4)用静态链表实现。
5)用间接寻址实现。
分开写程序,可以一个方法分别写一博客文章上交作业。
2.实现两个集合的相等判定、并、交和差运算。要求:
1)自定义数据结构
2)自先存储结构,并设计算法。在VC中实现。
以上三题,第1题必须完成。第2和第3题可以作为选做题。
四.实验报告
1.在博客中先写上实习目的和内容,画出主要操作运算算法图,然后分别上传程序代码。插入调试关键结果截图。
2.单独写一个博文,比较总结线性表的几种主要存储结果。
五、实验心得:
在经过了一番努力之下,终于做到了静态链表了,而且静态链表的表达跟之前的顺序表,单链表和双链表的表达大致上都有着不一样,而且可能是静态链表听得比较认真吧,然后这次做起来比之前的要好一点,虽然有着一些小错,通过调试都基本上能够找出来,只是可能放了国庆这个长假,所以就好多都忘了,就一直在狂翻书,看来以后不可以太长时间不看书了。
源代码:
#include <iostream>
using namespace std;
const int MaxSize=100;
struct SNode
{
int data;
int next;
};//建立静态链表
class SLList{
public:
SLList();
SLList(int a[],int n);
int Length();
int Get(int i);
int Locate(int x);
void Insert(int i,int x);
int Delete(int i);
void PrintList();
private:
SNode SList[MaxSize];
int first,avail;
};
void SLList::PrintList()
{
int p;
int i=0;
p=SList[first].next; //使其指向第一个元素
while(p!=-1)
{
i=i+1;
cout<<endl<<"第"<<i<<"个学生成绩"<<SList[p].data<<" ";
p=SList[p].next; //指针后移
}
cout<<endl;
}
int SLList::Length() //求长度
{
int p,count=0;
p=SList[first].next; //使其指向第一个元素
while(p!=-1)
{
p=SList[p].next; //指针后移
count++;
}
return count;
}
int SLList::Get(int i) //按位查找
{
int p,count=1;
p=SList[first].next;
while(p!=-1&&count<i)
{
p=SList[p].next;
count++;
}
if(p==-1) throw"位置";
else return SList[p].data;
}
int SLList::Locate(int x) //按值查找
{
int p,count=1;
p=SList[first].next;
while(p!=-1)
{
if(SList[p].data==x) return count;
p=SList[p].next;
count++;
}
return 0;
}
void SLList::Insert(int i,int x) //插入操作
{
int p,q,count=0;
p=first;
while(SList[p].next!=-1&&count<i-1)
{
p=SList[p].next;
count++;
}
if(SList[p].next==-1) throw"位置";
else
{
q=avail;
avail=SList[avail].next; //空闲链的头指针后移
SList[q].data=x; //将x填入下标为S的节点
SList[q].next=SList[p].next; //将x插到p后面
SList[p].next=q;
}
}
int SLList::Delete(int i) //删除操作
{
int x;
int p,q,count=0;
p=first;
while(SList[p].next!=-1&&count<i-1)
{
p=SList[p].next;
count++;
}
if(SList[p].next==-1) throw"位置";
else
{
q=SList[p].next;
x=SList[q].data;
SList[p].next=SList[q].next;
SList[q].next=avail;
avail=q;
return x;
}
}
SLList::SLList() //无参构造函数
{
first=0;avail=1;
SList[0].next=-1;
for(int i=0;i<MaxSize;i++)
{
SList[i].next=i+1;
SList[MaxSize-1].next=-1;
}
}
SLList::SLList(int a[],int n) //有参构造函数
{
int p;
if(n>MaxSize||a<=0) throw"错误";
SList[0].next=avail;
first=0;avail=1;
for(int i=0;i<MaxSize-1;i++)
{
SList[i].next=i+1;
SList[MaxSize-1].next=-1;
}
for(int j=0;j<n;j++)
{
p=avail;
SList[p].data=a[j];
avail=SList[avail].next;
}
SList[p].next=-1;
}
int main()
{
int arr[5]={75,80,85,90,95};
int flag=0,loc,x,tab,len;
SLList SLL(arr,5);
while (1)
{
cout<<" 静态链表的实现 "<<endl;
cout<<" 1输出学生成绩 "<<endl;
cout<<" 2输出表长 "<<endl;
cout<<" 3按位查找 "<<endl;
cout<<" 4按值查找 "<<endl;
cout<<" 5插入 "<<endl;
cout<<" 6删除 "<<endl;
cout<<" 0退出 "<<endl;
cout<<"请输入编号(0-6):";
cin>>tab;
switch(tab)
{
case 1:
{
cout<<"1.输出学生成绩 :";
SLL.PrintList();
cout<<endl;
break;
}
case 2:
{
cout<<"2.输出表长"<<endl;
len=SLL.Length();
cout<<"表的长度为:"<<len<<endl;
cout<<endl;
break;
}
case 3:
{
cout<<"3.按位查找"<<endl;
cout<<"输入查找成绩的位置:";
cin>>loc;
x=SLL.Get(loc);
cout <<"要查找的成绩是:"<<x<<endl;
cout<<endl;
break;
}
case 4:
{
cout<<"4.按值查找"<<endl;
cout<<"输入要查找成绩:";
cin>>x;
loc=SLL.Locate(x);
cout<<"输入要查找成绩的位置是:"<<loc<<endl;
cout<<endl;
break;
}
case 5:
{
cout<<"5.插入"<<endl;
cout<<"输入要插入成绩的位置:";
cin>>loc;
cout<<"输入要插入的成绩:";
cin>>x;
SLL.Insert(loc,x);
cout<<endl;
break;
}
case 6:
{
cout<<"6.删除"<<endl;
cout<<"输入要删除的成绩位置:";
cin>>loc;
x=SLL.Delete(loc);
cout<<"成绩"<<x<<"已被删除"<<endl;
break;
}
default:
{
cout<<"请输入数字0-6!"<<endl;
break;
}
}
}
return 0;
}
实验结果如图所示:
- 实验二之静态链表
- 实验二之静态链表
- 实验二 线性表综合实验之静态链表
- 实验二 线性表综合实验之《静态链表》
- 实验二 线性表综合实验之《静态链表》
- 实验二静态链表
- 实验二静态链表
- 实验二静态链表
- 实验二——静态链表
- 数据结构实验(二) 静态链表
- 实验二 线性表综合实验(静态链表)
- 实验二 静态链表实现学生成绩
- 实验二 创建学生成绩-静态链表
- 《数据结构》实验二:线性表综合实验——(4)静态链表
- 实验二 线性表综合实验——静态链表
- 数据结构:实验二线性表综合实验④静态链表
- 线性表综合实验之静态链表的实现
- 实验二之线性表
- 数据结构|创建学生成绩的静态链表(实验2.4)
- 间接寻址的基本及其应用(实验2.4)
- Java日期时间相关的类
- Hibernate一对多保存思考题
- #Java 核心技术卷一阅读笔记# 第十二章 Swing用户界面组件
- 实验二之静态链表
- 相对、绝对、固定定位,以及其层级关系和脱离文档流的影响
- asp.net如何使文本对齐方式为剧中
- 【UNP学习笔记】套接字地址相关函数
- 设计模式C++学习笔记之二(Proxy代理模式)
- [Java]从今天开始,每天记录一点点
- win64 python安装PIL出错
- java基本数据类型和数组
- ubuntu16.04用root用户登陆图形界面