数据结构学习--顺序表的代码实现(C++)

以下代码为使用C++完成顺序表的静态实现

  • 后面会尝试顺序表的动态实现
  • 顺序表的销毁还不会实现,待后面的深入学习再来补充
#include
using namespace std;
#define maxSize 10

struct sqlList
{
	int data[maxSize];                                  //静态的“数组”存放数据
	int length;                                         //顺序表的当前长度
};

//打印顺序表
void printSqlList(sqlList& L)
{
	cout << "当前顺序表顺序为:";
	for (int i = 0; i < L.length; i++)
	{
		cout << L.data[i] << "  ";
	}
	cout << endl;
}

//打印顺序表长度
void printlength(sqlList& L)
{
	cout << "顺序表当前长度为:" << L.length << endl;
}

//自定义顺序表
void setSqlList(sqlList &L,int n)         //n为用户自定义顺序表长度
{
	cout << "请输入数值" << endl;
	for (int i = 0; i < n; i++)
	{
		cin >> L.data[i];
		L.length++;
	}
	printSqlList(L);
}


//基本操作 初始化顺序表
void initList(sqlList &L)
{
	for (int i = 0; i < maxSize; i++)
	{
		L.data[i] = 0;
		L.length = 0;
	}
	cout << "顺序表初始化完成!(全部置0)" << endl;
}

//基本操作 增加某数据(**此处后面为解决问题有修改**)
void increaseSqlList(sqlList &L,int a,int b)                        //在第a处插入b;
{
	if (a > L.length)
	{
		cout << "增加数据操作有误" << endl;
	}
	else
	{
		for (int i = L.length; i >= a; i--)
		{
			L.data[i] = L.data[i - 1];
		}
		L.data[a - 1] = b;
		L.length++;
		printSqlList(L);
		printlength(L);
	}
	cout << endl;
}

//基本操作 删除某数据
void deletSqlList(sqlList& L,int a)
{
	if (a > L.length)
	{
		cout << "输入有误 查找不到要删除的数据" << endl;
	}
	else
	{
		for (int i = a-1; i < L.length; i++)
		{
			L.data[i] = L.data[i + 1];
		}
		L.length--;
		printSqlList(L);
		printlength(L);
	}
}

//基本操作 修改某数据
void modification(sqlList &L,int a,int b)            //a为要修改的位置,b为要修改成的内容
{
	if (a > L.length)
	{
		cout << "修改数据失败!" << endl;
	}
	else
	{
		L.data[a-1] = b;
		cout << "修改数据成功!" << endl;
	}
	printSqlList(L);
	printlength(L);
}

//基本操作 查找某数据
void findBySta(sqlList& L, int a)            //按位置查找
{
	if (a > L.length)
	{
		cout << "查找失败,该位置暂无数据!" << endl;
	}
	else
	{
		cout << a << " 位置的数据为:" << L.data[a - 1];
	}
}
void findByNum(sqlList& L, int a)           //按数字查找
{
	int num=0;
	for (int i = 0; i < L.length; i++)
	{
		if(L.data[i]==a)
		{
			num = 1;
			cout << "查找的数字" << a << "位于顺序表第" << i + 1 << endl;
		}
	}
	if (num == 0)
	{
		cout << "在顺序表中查找不到数字" << a;
	}
}

int main()
{
	int nlength;                                       //自定义数组长度
	cout << "请定义顺序表长度:" ;
	cin >> nlength;
	sqlList L;                                   //定义一个顺序表L
	if (nlength > maxSize)
	{
		cout << "顺序表初始化出错!" << endl;
	}
	else
	{
		//添加 初始化 顺序表
		initList(L);                                 //初始化顺序表(全部置0 避免脏数据)
		setSqlList(L, nlength);                      //顺序表传值
		cout << endl;

		//增操作
		int station1, num1;
		cout << "请输入想要插入的位置:" ;
		cin >> station1;
		cout << "请输入想要插入的数字:" ;
		cin >> num1;
		increaseSqlList(L, station1, num1);
		cout << endl;

		//删操作
		int station2;
		cout << "请输入想要删除的位置:" ;
		cin >> station2;
		deletSqlList(L, station2);
		cout << endl;

		//改操作
		int station3, num3;
		cout << "输入想要修改的位置:";
		cin >> station3;
		cout << "请输入修改后的数字:";
		cin >> num3;
		modification(L, station3, num3);
		cout<<endl;

		//查找操作
		int way,a,b;                                             //a为位置查找,b为数字查找
		cout <<"请输入你想要查找的方式:\n" << "1,通过位置查找\n" << "2,通过数字查找" << endl;
		cin >> way;
		if (way == 1)
		{
			cout << "请输入想要查找的位置:";
			cin >> a;
			findBySta(L, a);
		}
		else if (way == 2)
		{
			cout << "请输入想要查找的数字:";
			cin >> b;
			findByNum(L, b);
		}
		else
		{
			cout << "输入的数字有误!" << endl;
		}
	}

	return 0;
}

1,目前发现了以下两个问题 待解决

数据结构学习--顺序表的代码实现(C++)_第1张图片

  • 待解决
    解决办法如下:
//基本操作 增加某数据
void increaseSqlList(sqlList &L,int a,int b)                        //在第a处插入b;
{
	if (a > L.length || a==maxSize)                //此处有修改
	{
		cout << "增加数据操作有误" << endl;
	}
	else
	{
		for (int i = L.length; i >= a; i--)
		{
			L.data[i] = L.data[i - 1];
		}
		L.data[a - 1] = b;
		L.length++;
		printSqlList(L);
		printlength(L);
	}
	cout << endl;
}

数据结构学习--顺序表的代码实现(C++)_第2张图片

  • 待解决

2,代码实现时发现的自己代码能力的问题

在按照数字进行查找操作的时候 for循环来进行数组的遍历,输出结果的时候 想要的操作:完成遍历寻找不到数字打印“找不到结果”的时候,发现循环一次就要打印一次
因此想到了在for循环外构建一个int数,通过int数最后实现单独打印“找不到结果”。不知道是否有更好的办法?

你可能感兴趣的:(数据结构)