一、顺序表的建立与操作实现:
建立 n 个元素的顺序表,实现输出,插入,删除,查找等功能。实例代码如下:
1.#include <iostream>
using namespace std;const int N=10;
class SeqList{
private:
int data[N];
int length;
public:
SeqList(){length=0;}
SeqList(int d[],int n);
~SeqList(){}
void Insert(int n,int x);
void Delete(int n);
void Locate(int x);
void print();
};
SeqList::SeqList(int d[],int n){
if (n>=N)
throw "传入的参数异常";
for (int i=0;i<n;i++)
{
data[i]=d[i];
}
length=n;
}
void SeqList::Insert(int n,int x){
if (n>N) throw "上溢";
if (n<1||n>length+1) throw "插入位置非法";
for (int i=length;i>=n;i--)
{
data[i]=data[i-1];
}
data[--n]=x;
length++;
}
void SeqList::Delete(int n){
if (length==0) throw "下溢";
if (n<1||n>length) throw "删除位置非法";
for (int i=n;i<length;i++){
data[i-1]=data[i];
}
length--;
}
void SeqList::Locate(int x){
for (int i=0;i<length;i++){
if (data[i]==x)
cout<<"查找到"<<x<<"这个数据,在第"<<++i<<"位"<<endl;
}
}
void SeqList::print(){
for (int i=0;i<length;i++){
cout<<data[i]<<' ';
}
cout<<endl;
}
int main(){
int a[9]={1,2,6,8,11,45,25,9,5};
SeqList list(a,9);
cout<<"初始数据为:"<<endl;
try {
list.print();}
catch(char *s)
{
cout<<s<<endl;
}
cout<<"在第一个数据处插入9:"<<endl;
try {
list.Insert(3,4);}
catch(char *s)
{
cout<<s<<endl;
}
list.print();
cout<<"查找数据1:"<<endl;
try {
list.Locate(1);}
catch(char *s)
{
cout<<s<<endl;
}
list.print();
cout<<"删除第一个数据:"<<endl;
try {
list.Delete(8);}
catch(char *s)
{
cout<<s<<endl;
}
list.print();
return 0;
}
2.#include <iostream>
using namespace std;
const int N=100;
class Joseph{
private:
int a[N];//开辟顺序表
int count;//计数
public:
Joseph(int n){
for (int i=0;i<n;i++) //编号
a[i]=i+1;
};
~Joseph(){};
void Locate(int n,int m,int count);
void Delete(int n,int i);
};
void Joseph::Locate(int n,int m,int count){
int k=n;//储存总人数
for (int i=0;i<k;i++){
static int j=0;//定义j为静态变量,保持上一次的值
for (;;j++,count++){
if (j==n)
j=0; //当第n个人报数后,回到第一个人
if (count==m){
cout<<a[j]<<' ';//输出出圈编号
Delete(n,j);//出圈,删除该位置
n--;
break;
}
}
count=1;//计数初始化
}
}
void Joseph::Delete(int n,int i){
for (int j=i;j<n-1;j++)
a[j]=a[j+1];
}
int main (){
int n,m;
cout<<"请输入人数n,密码m:"<<endl;
cin>>n>>m;
Joseph J(n);
cout<<"出圈的顺序为:"<<endl;
J.Locate(n,m,1);
return 0;
}