数据结构实验二:线性表的实验
2015-01-01 20:29
134 查看
《数据结构》实验二: 线性表实验
一..实验目的
巩固线性表的数据结构,学会线性表的应用。
1.回顾线性表的逻辑结构,线性表的物理存储结构和常见操作。
2.学习运用线性表的知识来解决实际问题。
3.进一步巩固程序调试方法。
4.进一步巩固模板程序设计。
二.实验时间
准备时间为第2周到第4周,具体集中实验时间为第4周第2次课。2个学时。
三..实验内容
1.建立一个N个学生成绩的顺序表,对表进行插入、删除、查找等操作。分别输出结果。
要求如下:
1)用顺序表来实现。
2)用单链表来实现。
2.解决约瑟夫问题
设有编号为1,2,3,n的n(n>0)个人围在一起,每人持有一个密码m,从第一个人开始报数,报到m时停止报数,报m的人出圈,再从下一个人开始重新报数,报到m时停止报数,报m的人出圈,……直到的所有人出圈为止。当给定n和m后,输出出圈的次序。
要求如下:自定义数据结构,确定存储方法,并设计算法。在主程序中输入n和m后,输出结果。
3.实现两个集合的相等判定、并、交和差运算。要求:
1)自定义数据结构
2)自先存储结构,并设计算法。在VC中实现。
以上三题,第1题必须完成。第2和第3题可以作为选做题。
首先是头文件:
[cpp]
view plaincopyprint?
#define Seqlist_H
const int MaxSize=60;
class Seqlist
{
public:
Seqlist(){length=0;}
Seqlist(int a[],int n);
~Seqlist(){}
void Insert(int i,int x);
int Delete(int i);
int Locate(int x);
int Get(int x);
void PrintList();
private:
int data[MaxSize];
int length;
};
接着是程序代码-->>
[cpp]
view plaincopyprint?
#include<iostream>
#include<iomanip>
using namespace std;
#include "Seqlist.H"
Seqlist::Seqlist(int a[],int n)
{
if(n>MaxSize)throw"参数非法";
for(int i=0;i<n;i++)
data[i]=a[i];
length=n;
}
void Seqlist::Insert(int i,int x)
{
if(length>MaxSize)throw"上溢";
if(i<1||i>length+1)throw"未知非法";
for(int j=length;j>=i;j--)
data[j]=data[j-1];
data[i-1]=x;
length++;
}
int Seqlist::Delete(int i)
{
if(length==0)throw"下溢";
if(i<1||i>length)throw"位置非法";
int x=data[i-1];
for (int j=i;j<length;j++)
data[j-1]=data[j];
length--;
return x;
10351
}
int Seqlist ::Locate(int x)
{
for(int i=0;i<length;i++)
if(data[i]==x)return i+1;
return 0;
}
int Seqlist::Get(int x)
{
if(x<1&&x>length)throw"位置非法";
else return data[x-1];
}
void Seqlist ::PrintList()
{
for(int i=0;i<length;i++)
cout<<setw(5)<<data[i]<<"";
cout<<endl;
}
[cpp]
view plaincopyprint?
#include<iostream>
using namespace std;
#include "Seqlist.H"
void main()
{
int r[5]={12,23,38,49,57};
Seqlist L(r,5);
cout<<"执行插入学生成绩前数据为:"<<endl;
L.PrintList();
try
{
L.Insert(2,89);
}
catch (char *s)
{
cout<<s<<endl;
}
cout<<"执行插入后学生成绩的数据为:"<<endl;
L.PrintList();
try
{
L.Delete(1);
}
catch (char *s)
{
cout<<s<<endl;
}
cout<<"成绩为38的元素位置为:";
cout<<L.Locate(38)<<endl;
cout<<"位置为4的成绩位置为:";
cout<<L.Get(4)<<endl;
cout<<"删除后成绩为:"<<endl;
L.PrintList();
system("pause");
}
以上是用顺序表,接下来使用单链表-->>
头文件-->>
[cpp]
view plaincopyprint?
#ifndef LinkList_H
#define LinkList_H
template<class DataType>
struct Node
{
DataType data;
Node<DataType>*next;
};
template<class DataType>
class LinkList
{
public:
LinkList();
LinkList(DataType a[],int n);
~LinkList();
int Locate(DataType x);
int Get(DataType x);
void Insert (int i,DataType x);
DataType Delete(int i);
void PrintList();
private:
Node<DataType>*first;
};
#end
[cpp]
view plaincopyprint?
#include<iostream>
#include<iomanip>
#include"LinkList.H"
using namespace std;
template<class DataType>
LinkList<DataType>::LinkList()
{
first=new Node<DataType>;
first->next=NULL;
}
template<class DataType>
LinkList<DataType>::LinkList(DataType a[],int n)
{
Node <DataType>*r,*s;
first=new Node<DataType>;
r=first;
for (int i=0;i<n;i++)
{
s=new Node<DataType>;
s->data=a[i];
r->next=s;r=s;
}
r->next=NULL;
}
template<class DataType>
LinkList<DataType>::~LinkList()
{
Node<DataType>*q=NULL;
while(first!=NULL)
{
q=first;
first=first->next;
delete q;
}
}
template<class DataType>
void LinkList<DataType>::Insert(int i,DataType x)
{
Node<DataType>*p=first,*s=NULL;
int count=0;
while(p!=NULL&&count<i-1)
{
p=p->next;
count++;
}
if(p==NULL)throw"位置";
else
{
s=new Node<DataType>;
s->data=x;
s->next=p->next;
p->next=s;
}
}
template<class DataType>
DataType LinkList<DataType>::Delete(int i)
{
Node<DataType>*p=first,*q=NULL;
DataType x;
int count=0;
while(p!=NULL&&count<i-1)
{
p=p->next;
count++;
}
if(p==NULL||p->next==NULL)
throw"位置";
else
{
q=p->next;
x=q->data;
p->next=q->next;
delete q;
return x;
}
}
template<class DataType>
int LinkList<DataType>::Locate(DataType x)
{
Node<DataType>*p=first->next;
int count=1;
while(p!=NULL)
{
if(p->data==x)return count;
p=p->next;
count++;
}
return 0;
}
template<class DataType>
int LinkList<DataType>::Get(DataType x)
{
Node<DataType>*p=first->next;
p=first->next; int count=1;
while(p!=NULL&&count<1)
{
p=p->next;
count++;
}
if(p==NULL)throw"位置";
else return p->data;
}
template<class DataType>
void LinkList<DataType>::PrintList()
{
Node<DataType>*p=first->next;
while(p!=NULL)
{
cout<<setw(5)<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
[cpp]
view plaincopyprint?
#include<iostream>
#include"LinkList.cpp"
#include"LinkList.H"
using namespace std;
void main()
{
int r[5]={75,83,74,92,58};
LinkList<int>L(r,5);
cout<<"执行插入成绩操作前数据为:"<<endl;
L.PrintList();
try
{
L.Insert(2,70);
}
catch(char *s)
{
cout<<s<<endl;
}
cout<<"执行插入成绩操作后数据为:"<<endl;
L.PrintList();
try
{
L.Delete(3);
}
catch(char *s)
{
cout<<s<<endl;
}
cout<<"输出位置为3的元素为:"<<endl;
cout<<L.Get(3)<<endl;
cout<<"输出值为74的位置为:"<<endl;
cout<<L.Locate(74)<<endl;
cout<<"执行删除操作成绩后数据为:"<<endl;
L.PrintList();
system("pause");
}
《数据结构》实验二: 线性表实验
一..实验目的
巩固线性表的数据结构,学会线性表的应用。
1.回顾线性表的逻辑结构,线性表的物理存储结构和常见操作。
2.学习运用线性表的知识来解决实际问题。
3.进一步巩固程序调试方法。
4.进一步巩固模板程序设计。
二.实验时间
准备时间为第2周到第4周,具体集中实验时间为第4周第2次课。2个学时。
三..实验内容
1.建立一个N个学生成绩的顺序表,对表进行插入、删除、查找等操作。分别输出结果。
要求如下:
1)用顺序表来实现。
2)用单链表来实现。
2.解决约瑟夫问题
设有编号为1,2,3,n的n(n>0)个人围在一起,每人持有一个密码m,从第一个人开始报数,报到m时停止报数,报m的人出圈,再从下一个人开始重新报数,报到m时停止报数,报m的人出圈,……直到的所有人出圈为止。当给定n和m后,输出出圈的次序。
要求如下:自定义数据结构,确定存储方法,并设计算法。在主程序中输入n和m后,输出结果。
3.实现两个集合的相等判定、并、交和差运算。要求:
1)自定义数据结构
2)自先存储结构,并设计算法。在VC中实现。
以上三题,第1题必须完成。第2和第3题可以作为选做题。
首先是头文件:
[cpp]
view plaincopyprint?
#define Seqlist_H
const int MaxSize=60;
class Seqlist
{
public:
Seqlist(){length=0;}
Seqlist(int a[],int n);
~Seqlist(){}
void Insert(int i,int x);
int Delete(int i);
int Locate(int x);
int Get(int x);
void PrintList();
private:
int data[MaxSize];
int length;
};
#define Seqlist_H const int MaxSize=60; class Seqlist { public: Seqlist(){length=0;} Seqlist(int a[],int n); ~Seqlist(){} void Insert(int i,int x); int Delete(int i); int Locate(int x); int Get(int x); void PrintList(); private: int data[MaxSize]; int length; };显然说书本上有,,不过哥已经弄通了。。
接着是程序代码-->>
[cpp]
view plaincopyprint?
#include<iostream>
#include<iomanip>
using namespace std;
#include "Seqlist.H"
Seqlist::Seqlist(int a[],int n)
{
if(n>MaxSize)throw"参数非法";
for(int i=0;i<n;i++)
data[i]=a[i];
length=n;
}
void Seqlist::Insert(int i,int x)
{
if(length>MaxSize)throw"上溢";
if(i<1||i>length+1)throw"未知非法";
for(int j=length;j>=i;j--)
data[j]=data[j-1];
data[i-1]=x;
length++;
}
int Seqlist::Delete(int i)
{
if(length==0)throw"下溢";
if(i<1||i>length)throw"位置非法";
int x=data[i-1];
for (int j=i;j<length;j++)
data[j-1]=data[j];
length--;
return x;
10351
}
int Seqlist ::Locate(int x)
{
for(int i=0;i<length;i++)
if(data[i]==x)return i+1;
return 0;
}
int Seqlist::Get(int x)
{
if(x<1&&x>length)throw"位置非法";
else return data[x-1];
}
void Seqlist ::PrintList()
{
for(int i=0;i<length;i++)
cout<<setw(5)<<data[i]<<"";
cout<<endl;
}
#include<iostream> #include<iomanip> using namespace std; #include "Seqlist.H" Seqlist::Seqlist(int a[],int n) { if(n>MaxSize)throw"参数非法"; for(int i=0;i<n;i++) data[i]=a[i]; length=n; } void Seqlist::Insert(int i,int x) { if(length>MaxSize)throw"上溢"; if(i<1||i>length+1)throw"未知非法"; for(int j=length;j>=i;j--) data[j]=data[j-1]; data[i-1]=x; length++; } int Seqlist::Delete(int i) { if(length==0)throw"下溢"; if(i<1||i>length)throw"位置非法"; int x=data[i-1]; for (int j=i;j<length;j++) data[j-1]=data[j]; length--; return x; } int Seqlist ::Locate(int x) { for(int i=0;i<length;i++) if(data[i]==x)return i+1; return 0; } int Seqlist::Get(int x) { if(x<1&&x>length)throw"位置非法"; else return data[x-1]; } void Seqlist ::PrintList() { for(int i=0;i<length;i++) cout<<setw(5)<<data[i]<<""; cout<<endl; }主函数-->>
[cpp]
view plaincopyprint?
#include<iostream>
using namespace std;
#include "Seqlist.H"
void main()
{
int r[5]={12,23,38,49,57};
Seqlist L(r,5);
cout<<"执行插入学生成绩前数据为:"<<endl;
L.PrintList();
try
{
L.Insert(2,89);
}
catch (char *s)
{
cout<<s<<endl;
}
cout<<"执行插入后学生成绩的数据为:"<<endl;
L.PrintList();
try
{
L.Delete(1);
}
catch (char *s)
{
cout<<s<<endl;
}
cout<<"成绩为38的元素位置为:";
cout<<L.Locate(38)<<endl;
cout<<"位置为4的成绩位置为:";
cout<<L.Get(4)<<endl;
cout<<"删除后成绩为:"<<endl;
L.PrintList();
system("pause");
}
#include<iostream> using namespace std; #include "Seqlist.H" void main() { int r[5]={12,23,38,49,57}; Seqlist L(r,5); cout<<"执行插入学生成绩前数据为:"<<endl; L.PrintList(); try { L.Insert(2,89); } catch (char *s) { cout<<s<<endl; } cout<<"执行插入后学生成绩的数据为:"<<endl; L.PrintList(); try { L.Delete(1); } catch (char *s) { cout<<s<<endl; } cout<<"成绩为38的元素位置为:"; cout<<L.Locate(38)<<endl; cout<<"位置为4的成绩位置为:"; cout<<L.Get(4)<<endl; cout<<"删除后成绩为:"<<endl; L.PrintList(); system("pause"); }执行结果=_=
以上是用顺序表,接下来使用单链表-->>
头文件-->>
[cpp]
view plaincopyprint?
#ifndef LinkList_H
#define LinkList_H
template<class DataType>
struct Node
{
DataType data;
Node<DataType>*next;
};
template<class DataType>
class LinkList
{
public:
LinkList();
LinkList(DataType a[],int n);
~LinkList();
int Locate(DataType x);
int Get(DataType x);
void Insert (int i,DataType x);
DataType Delete(int i);
void PrintList();
private:
Node<DataType>*first;
};
#end
#ifndef LinkList_H #define LinkList_H template<class DataType> struct Node { DataType data; Node<DataType>*next; }; template<class DataType> class LinkList { public: LinkList(); LinkList(DataType a[],int n); ~LinkList(); int Locate(DataType x); int Get(DataType x); void Insert (int i,DataType x); DataType Delete(int i); void PrintList(); private: Node<DataType>*first; }; #end程序文件-->>
[cpp]
view plaincopyprint?
#include<iostream>
#include<iomanip>
#include"LinkList.H"
using namespace std;
template<class DataType>
LinkList<DataType>::LinkList()
{
first=new Node<DataType>;
first->next=NULL;
}
template<class DataType>
LinkList<DataType>::LinkList(DataType a[],int n)
{
Node <DataType>*r,*s;
first=new Node<DataType>;
r=first;
for (int i=0;i<n;i++)
{
s=new Node<DataType>;
s->data=a[i];
r->next=s;r=s;
}
r->next=NULL;
}
template<class DataType>
LinkList<DataType>::~LinkList()
{
Node<DataType>*q=NULL;
while(first!=NULL)
{
q=first;
first=first->next;
delete q;
}
}
template<class DataType>
void LinkList<DataType>::Insert(int i,DataType x)
{
Node<DataType>*p=first,*s=NULL;
int count=0;
while(p!=NULL&&count<i-1)
{
p=p->next;
count++;
}
if(p==NULL)throw"位置";
else
{
s=new Node<DataType>;
s->data=x;
s->next=p->next;
p->next=s;
}
}
template<class DataType>
DataType LinkList<DataType>::Delete(int i)
{
Node<DataType>*p=first,*q=NULL;
DataType x;
int count=0;
while(p!=NULL&&count<i-1)
{
p=p->next;
count++;
}
if(p==NULL||p->next==NULL)
throw"位置";
else
{
q=p->next;
x=q->data;
p->next=q->next;
delete q;
return x;
}
}
template<class DataType>
int LinkList<DataType>::Locate(DataType x)
{
Node<DataType>*p=first->next;
int count=1;
while(p!=NULL)
{
if(p->data==x)return count;
p=p->next;
count++;
}
return 0;
}
template<class DataType>
int LinkList<DataType>::Get(DataType x)
{
Node<DataType>*p=first->next;
p=first->next; int count=1;
while(p!=NULL&&count<1)
{
p=p->next;
count++;
}
if(p==NULL)throw"位置";
else return p->data;
}
template<class DataType>
void LinkList<DataType>::PrintList()
{
Node<DataType>*p=first->next;
while(p!=NULL)
{
cout<<setw(5)<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
#include<iostream> #include<iomanip> #include"LinkList.H" using namespace std; template<class DataType> LinkList<DataType>::LinkList() { first=new Node<DataType>; first->next=NULL; } template<class DataType> LinkList<DataType>::LinkList(DataType a[],int n) { Node <DataType>*r,*s; first=new Node<DataType>; r=first; for (int i=0;i<n;i++) { s=new Node<DataType>; s->data=a[i]; r->next=s;r=s; } r->next=NULL; } template<class DataType> LinkList<DataType>::~LinkList() { Node<DataType>*q=NULL; while(first!=NULL) { q=first; first=first->next; delete q; } } template<class DataType> void LinkList<DataType>::Insert(int i,DataType x) { Node<DataType>*p=first,*s=NULL; int count=0; while(p!=NULL&&count<i-1) { p=p->next; count++; } if(p==NULL)throw"位置"; else { s=new Node<DataType>; s->data=x; s->next=p->next; p->next=s; } } template<class DataType> DataType LinkList<DataType>::Delete(int i) { Node<DataType>*p=first,*q=NULL; DataType x; int count=0; while(p!=NULL&&count<i-1) { p=p->next; count++; } if(p==NULL||p->next==NULL) throw"位置"; else { q=p->next; x=q->data; p->next=q->next; delete q; return x; } } template<class DataType> int LinkList<DataType>::Locate(DataType x) { Node<DataType>*p=first->next; int count=1; while(p!=NULL) { if(p->data==x)return count; p=p->next; count++; } return 0; } template<class DataType> int LinkList<DataType>::Get(DataType x) { Node<DataType>*p=first->next; p=first->next; int count=1; while(p!=NULL&&count<1) { p=p->next; count++; } if(p==NULL)throw"位置"; else return p->data; } template<class DataType> void LinkList<DataType>::PrintList() { Node<DataType>*p=first->next; while(p!=NULL) { cout<<setw(5)<<p->data<<" "; p=p->next; } cout<<endl; }主函数——>>
[cpp]
view plaincopyprint?
#include<iostream>
#include"LinkList.cpp"
#include"LinkList.H"
using namespace std;
void main()
{
int r[5]={75,83,74,92,58};
LinkList<int>L(r,5);
cout<<"执行插入成绩操作前数据为:"<<endl;
L.PrintList();
try
{
L.Insert(2,70);
}
catch(char *s)
{
cout<<s<<endl;
}
cout<<"执行插入成绩操作后数据为:"<<endl;
L.PrintList();
try
{
L.Delete(3);
}
catch(char *s)
{
cout<<s<<endl;
}
cout<<"输出位置为3的元素为:"<<endl;
cout<<L.Get(3)<<endl;
cout<<"输出值为74的位置为:"<<endl;
cout<<L.Locate(74)<<endl;
cout<<"执行删除操作成绩后数据为:"<<endl;
L.PrintList();
system("pause");
}
#include<iostream> #include"LinkList.cpp" #include"LinkList.H" using namespace std; void main() { int r[5]={75,83,74,92,58}; LinkList<int>L(r,5); cout<<"执行插入成绩操作前数据为:"<<endl; L.PrintList(); try { L.Insert(2,70); } catch(char *s) { cout<<s<<endl; } cout<<"执行插入成绩操作后数据为:"<<endl; L.PrintList(); try { L.Delete(3); } catch(char *s) { cout<<s<<endl; } cout<<"输出位置为3的元素为:"<<endl; cout<<L.Get(3)<<endl; cout<<"输出值为74的位置为:"<<endl; cout<<L.Locate(74)<<endl; cout<<"执行删除操作成绩后数据为:"<<endl; L.PrintList(); system("pause"); }以上是用单链表实现=_=
相关文章推荐
- 数据结构实验二:线性表实验
- 数据结构实验二 :线性表的实验
- 数据结构实验二 :线性表的实验
- 信管16数据结构:实验二 线性表综合实验
- 20162327WJH第一次实验——线性结构
- <数据结构> 实验二 线性表的实验之一
- 实验二 线性表的综合实验(c++)
- 《数据结构》实验二:线性表实验
- 实验二:线性表实验-单链表的实现
- 实验二:线性表的实验
- 《数据结构》实验二:线性表实验(1)
- 实验二、1基本线性表的基本运算
- 实验一:线性表的顺序存储结构(验证性实验)
- [SDUT](3379)数据结构实验之查找七:线性之哈希表 ---哈希查找(查找)
- 一个自带简易数据集的模拟线性分类器matlab代码——实验训练
- 数据结构实验之查找七:线性之哈希表
- 数据结构实验之查找七:线性之哈希表
- 实验一线性表的基本操作实现及其应用
- 实验一 线性表的基本操作实现及其应用
- 实验一:线性表的基本操作实现及其应用