数据结构与算法实验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日 --一只符华单推人