数据结构之顺序表

下周就要上数据结构实验课,提前写写熟悉一下。顺序表还是比较简单了,和数组差不多。

#include <bits/stdc++.h>
using namespace std;
const int  INIT_SIZE = 1001;
typedef struct node{
    int *elem;
    int length;
}Sqlist;
int a[1001];
void create(Sqlist &L,int n)
{
    int i;
    L.elem = new int[INIT_SIZE];
    for( i = 0 ; i < n ; i++)
    {
        cin >> a[i];
    }
    L.length = n;
    cout << "已经成功创建顺序表。"<<endl;
}
void print(Sqlist L)
{
    int i;
    cout << "输出顺序表为:" << endl;
    for(i = 0 ; i < L.length ; i++)
    {
        cout << a[i] << endl;
    }
    cout << "顺序表输出完毕。"<<endl;
}
void  Search(Sqlist L ,int &e)
{
    int i;
    int miner = a[0];
    for(i = 1 ;i < L.length ; i++)
    {
        if(a[i] > miner)
        {
            miner = a[i];
        }
    }
    e = miner;
}
int Insert(Sqlist &L,int pos,int e)
{
    int i;
    if(pos > L.length+1 || pos < 1)
    return 0;
    for(i = L.length-1 ; i > pos-2 ; i--)
    {
        a[i+1] = a[i];
    }
    a[pos-1] = e;
    L.length++;
    return 1;
}
int Erase(Sqlist &L,int pos)
{
    int i;
    if(pos < 1 || pos > L.length)
        return 0;
    for( i = pos ; i <= L.length - 1 ; i++)
    {
        a[i-1] = a[i];
    }
    L.length--;
    return 1;
}
void Sort(Sqlist L)
{
    int i,j,k;
    for(i = 0 ;i < L.length-1 ; i++)
    {
        int k = i;
        for(j = i+1 ; j < L.length; j++)
        {
            if(a[j] < a[k])
            {
                k = j;
            }
        }
        if(k != i)
        {
            swap(a[i],a[k]);
        }
    }
}
void rsort(Sqlist L)
{
    int i,t;
    for( i = 0 ; i <= (L.length-1)/2 ; i++)
    {
        t = a[i];
        a[i] = a[L.length-i-1];
        a[L.length-i-1] = t;
    }
}
int main()
{
    Sqlist L;
    int A,n,pos,T;
    int e;      //e用来保存查找的值
    cout << "选择1则创建一个顺序表。"<<endl;
    cout << "选择2则输出一个顺序表。"<<endl;
    cout << "选择3则查找最大值并输出。"<<endl;
    cout << "选择4则在第i个位置插入元素e."<<endl;
    cout << "选择5则删除第i位置的元素。"<<endl;
    cout << "选择6则将顺序表按升序排序。"<<endl;
    cout << "选择7则将顺序表就地逆序。(只多占用一个存储单元)。"<<endl;
    cout << "请输入你的操作次数:" << endl;
    cin >> T;
    while(T--)
    {
    cout << "请输入你的选择:" << endl;
    cin >> A;
    switch(A)
    {
    case 1:{
    cout << "请输入顺序表的长度。"<<endl;
    cin >> n;
    cout << "请依次输入每个位置的元素:"<<endl;
    create(L,n);
    break;
    }
    case 2:{
    print(L);
    break;
    }
    case 3:{
    cout <<"正在查询最大值。。。。"<<endl;
    Search(L,e);
    cout <<"最大值为:"<<  e << endl;
    break;
    }
    case 4:{
    cout << "请选择你要插入的元素以及你选择要插入的位置:";
    cin >> e >> pos;
    if(Insert(L,pos,e))
        cout << "已成功插入" << endl;
    else
        cout << "位置不合法。"<<endl;
    break;
    }
    case 5:{
    cout << "请输入你要删除的位置:";
    cin >> pos;
    if(Erase(L,pos))
        cout << "已经成功删除该元素。"<<endl;
    else
        cout << "删除位置不正确。"<<endl;
    break;
    }
    case 6:{
    cout << "正在将顺序表按升序排序...";
    Sort(L);
    cout << "已经成功排好序。"<<endl;
    break;
    }
    case 7:{
    cout << "正在将顺序表就地逆序。。。"<<endl;
    rsort(L);
    cout << "已成功逆序排好。"<<endl;
    break;
    }
    }
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值