以下是代码:
#include <iostream>
using namespace std;
#define maxSize 100
typedef struct Sqlist
{
int data[maxSize];
int length;
}Sqlist;
int main()
{
//std::cout << "Hello World!\n";
int x;
Sqlist a;
void insert(Sqlist &L, int x);
void printList(Sqlist);
a.length = 8;
for (int i = 0; i < a.length; i++)
{
cin >> a.data[i];
}
printList(a);
cin >> x;
insert(a, x);
printList(a);
return 0;
}
void insert(Sqlist &L, int x)
{
int insert = -1, i, temp;
for (i = 0; i < L.length; i++)
{
if (L.data[i] < x)
insert = i;
}
if (insert == -1)
{
insert = i;
}
insert++;
temp = L.length;
while (temp>=insert+1)
{
L.data[temp--] = L.data[temp-1];
}
L.data[insert] = x;
L.length++;
return;
}
void printList(Sqlist L)
{
cout << "List data: ";
for (int i = 0; i < L.length; i++)
{
cout << L.data[i] << " ";
}
cout << ", list length: " << L.length << " ." << endl;
}
编程的时候发现几个问题:
1、结构体类型Sqlist的实例无法直接初始化,一开始我想这样:
Sqlist a;
a={12,13,14,15,16,17,18,19};
发现会报错,因为initializer list只有声明的时候能用一次,于是我就改成这样:
Sqlist a.data={12,13,14,15,16,17,18,19};
结果有语法错误,最后只能一个个输入。
对于类,可以通过构造函数在声明的时候就对其进行初始化,但是对于结构体,好像还没有类似的方法。
2.插入以后,从插入位置开始,后面的数要往后移,记住要从最后面开始,data[i]=data[i-1];i--;,直到插入位置,而不能从插入位置开始往后移
3.注意因为要改变线性表的值,所以形式参数要用传引用&L,不能用传值,如果用传值,则线性表中各元素无法改变。P.S.(用指针应该也可以)