信管1171李威数据结构实验1

一、顺序表的建立与操作实现:

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





猜你喜欢

转载自blog.csdn.net/weixin_41944647/article/details/79793879