数据结构与算法实验1实现顺序表各种基本运算的算法

数据结构与算法实验1实现顺序表各种基本运算的算法

“顺序表功能展示”
“1.初始化顺序表”
“2.指定位置插入单个元素”
“3.输出顺序表”
“4.输出顺序表长度”
“5.输出顺序表第a个元素”
“7.指定位置删除单个元素”
“0.释放顺序表”
代码部分


#include<iostream>
#ifndef ARRAY_H  //检查是否有同样名字的
#define ARRAY_H
#include<stdlib.h>
#define maxsize 15  //设置存入大小
using namespace std;

typedef int DataType;
typedef struct
{
    DataType data[maxsize];   //建立一维数组
    int SeqLength;    //线性表长度

}SeqList;    //后跟SeqList为定义的同时初始化顺序表->分配空间

SeqList* Init_SeqList();                     
  
//因为都在开头写的函数什么的不是 最后那块就不写声明了

SeqList* Init_SeqList()                    
{
    SeqList* L;
    L = new SeqList;
    L->SeqLength=0 ;  //长度设置为-1
    return L;
}                                      
 
void showfunction()   //展示操作的功能
{
    cout << "顺序表功能展示" << endl;
    cout << "1.初始化顺序表" << endl;           //已写
    cout << "2.指定位置插入单个元素" << endl;   //已写
    cout << "3.输出顺序表" << endl;             //已写
    cout << "4.输出顺序表长度" << endl;         //已写
    cout << "5.输出顺序表第a个元素" << endl;    //已写
    cout << "6.输出元素b的位置" << endl;        //已写
    cout << "7.指定位置删除单个元素" << endl;   //已写
    cout << "0.释放顺序表" << endl;             //已写
}


void Define_SeqList(SeqList* L, int &num1)        //初始化顺序表  上引用是意外 开始打算比大小来确定顺序表大小的 选个最小去展示元素
{
    cout << "请依次输入顺序表要存储的元素" << endl;
    cout << "温馨提示:(╯‵□′)╯顺序表的表长为"<<maxsize << endl;
   
    for (int i = 0; i <num1; i++)
    {
        cout << "输入第"<<i+1<<"个元素" << endl;
        cin >> L->data[i];    //存入数组元素
    }

}             

void DisPlay_SeqLIst(SeqList* L)               //展示顺序表中所有元素   
{                                            
    int a;
    for (a = 0;a<L->SeqLength; a++)
    {
        a;
        //cout<<L->SeqLength<<endl;  在Switch中一直刷一直创建新的导致功能3一直不对劲 留着看是哪里出问题的
    }
    if (a ==0)
    {
        //cout << L->SeqLength << endl;  在Switch中一直刷一直创建新的导致功能3一直不对劲 留着看是哪里出问题的
        cout << "这是个空表 ╮( ̄▽ ̄"")╭" << endl;   //判断顺序表是否为空成就达成
    }
    else
    {
        for (int b = 0; b <L->SeqLength; b++)
        {
            cout << "顺序表中第" << b +1<< "个元素为" << L->data[b] << endl;
        }
    }
    cout << endl;
}             

int InSert_SeqList(SeqList* L, int& num2, DataType x)   //插入元素到某位置
{
    cout << "把元素" << x << "添加到位置" << num2 << "上" << endl;

    if (num2 < 1 || num2 > L->SeqLength + 1) // 判断是否插错
    {
        cout << "插入位置错误" << endl;
        return 0;
    }

    else if (L->SeqLength == maxsize - 1)     //数组长度设定为-1 表满
    {
        cout << "顺序表已满,无法插入,请删除部分元素后重试╮( ̄▽ ̄"")╭" << endl;
        return -1;
    }
    else if (num2 >= L->SeqLength)
    {
        L->data[L->SeqLength ] =x;
        L->SeqLength++;
        cout << "元素插入成功" << endl;
        DisPlay_SeqLIst(L);
        return 1;
    }
    else 
    {
        for (int j = L->SeqLength + 1; j >= 1; j--)  //i之后全部往后移
        {
            L->data[j + 1] = L->data[j];
            cout << "元素插入成功" << endl;
            
        }
    L->data[num2 - 1] = x;                   //插入       
        L->SeqLength++;
        cout << "元素插入成功" << endl;
        DisPlay_SeqLIst(L);
        return 1;
     }
}

int GetSeqlength(SeqList *L,int &num3)     //输出顺序表第a个元素 
{

    if (num3 < 1 || num3 > L->SeqLength + 1) // 输出位置是否正确
    {
        cout << "输出位置错误,请重新输入" << endl;
        return 0;
    }
    else 
    {
        cout << "第" << num3 << "个元素为"<<L->data[num3-1] << endl;
    }
}
void  GetElema(SeqList *L,int &a)               //查找元素a的位置
{
    int temp=0;
    for (int i = 0; i < L->SeqLength;i++) 
    {
       
        if (L->data[i] == a)
        {
            cout << "元素" << a << "的位置为" << "L->date[" << i << "]" << endl;
        }
        temp++;
    }
    if (++temp > 0) 
    {
        cout << "无元素" << a << endl;
    }
    
}
int Delete_SeqList(SeqList* L, int &num4)       //删除指定位置单个元素
{
    cout << "将位置" << num4 << "的元素删除" << endl;
    int j;
    if (num4 <1 || num4 > L->SeqLength )
    {
        cout << "不存在第" << num4 << "个元素" << endl;
        return 0;
    }
    for (j = num4; j < L->SeqLength ; j++)
    {
        L->data[j-1] = L->data[j];
    }
    L->SeqLength--;
    cout << "删除成功" << endl;
    DisPlay_SeqLIst(L);
    return 1;
}

void deleteSeqList(SeqList *L) 
{
    if (L->data)
        delete L->data;               //释放存储空间
}
int main()
{
    SeqList* L;  //顺序表定义
    L = Init_SeqList();  //顺序表初始化
    int num1;                         //写外边 写里面绕一次一次创建L然后一次L长度为0 导致完全不正确
    int num2;
    DataType x;
    int num3;
    int a;
    int num4;

    while (true) 
    {
        
        showfunction();  //功能展示表
        int numx;        
        cout << "选择要使用的功能" << endl;
        cin >> numx;
        if (numx > 10)
        {
            cout << "无该功能,请重新选(╯‵□′)╯" << endl;
        }
        else
        {
            switch (numx)
            {
            case 1:         //初始化顺序表
            {
                cout << "请输入要存入的元素数" << endl;
                cin >> num1;
                L->SeqLength = num1;
                Define_SeqList( L,num1);
                system("pause");
                system("cls");
                break;
            }
            case 2:         //指定位置插入单个元素
            {
                cout << "插入位置为" << endl;
                cin >> num2;
                cout << "插入元素为" << endl;
                cin >> x;
                InSert_SeqList(L, num2, x);
                system("pause");
                system("cls");
                break;
            }
            case 3:      //输出顺序表
            {
                DisPlay_SeqLIst(L);
                system("pause");
                system("cls");
                break;
            }
            case 4:   //输出顺序表长度
            {
                cout << "顺序表长度为" <<L->SeqLength<< endl;
                system("pause");
                system("cls");
                break;
            }
            case 5:   //输出顺序表第a 个元素
            {
                cout << "输入要查找第几个元素" << endl;
                cin >> num3;
                GetSeqlength(L, num3);
                system("pause");
                system("cls");
                break;
            }
            case 6:  //输出元素b的位置
            {
                cout << "输入要查找的元素名称" << endl;
                cin >> a;
                GetElema( L, a);
                system("pause");
                system("cls");
                break;
            }
            case 7:   //删除指定位置单个元素
            {
                cout << "输入要删除元素的位置" << endl;
                cin >> num4;
                Delete_SeqList(L, num4);
                system("pause");
                system("cls");
                break;
            }
            case 0:   //释放顺序表
            {
                deleteSeqList(L);
                system("pause");
                system("cls");
                break;
            }
            }

        }
    }
    return 0;
}
#endif // !ARRAY_H

这串码最难受的是功能6 每次查找元素都会显示无元素*
至于表情包什么的 因本人改错码改的很酸爽 所以用代码表示我的心情*

本人写的时候卡了最久的是switch部分 switch首先必须是整形常量,相信大伙在学习阶段都很少会先手把字符什么写进去踩雷 其次就是Switch 如果在Switch里面声明变量那么 因为Switch会顺着挨个找导致的结果我的顺序表不停归零 导致其他部分没法测试 之后在部分区域插输出我需要知道的变量才研究清楚问题在哪

-2020年9月27日 --一只符华单推人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只符华单推人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值