多写、多练!
多写、多练!
多写、多练!

基本作业

1.熟悉​​C语言语法​​,了解指针、结构体的使用

2.编程实现顺序表的定义及基本操作(书上P19),并自己通过编写main函数进行测试;

ADT List {
数据对象:D={ai|ai ∈ Elemset,i=1,2,…,n,n≥0}
数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,…,n}
基本操作:
InitList(&L)
初始化操作,建立一个空的线性表L。
DistroyList(&L)
初始条件:线性表L已存在
操作结果:销毁线性表,释放其空间。
ClearList(&L)
初始条件:线性表L已存在
操作结果:将线性表清空。
ListEmpty(L)
初始条件:线性表L已存在
操作结果:若线性表为空,返回true,否则返回false。
ListLength(L)
初始条件:线性表L已存在
操作结果:返回L中数据元素的个数。
GetElem(L, i, &e)
初始条件:线性表L已存在
操作结果:用e返回线性表L中的第i个位置元素的值。
LocateElem(L, e)
初始条件:线性表L已存在
操作结果:返回线性表L中第一个与给定值e相等的数据元素的位置。若不存在这样的元素,则返回0。
ListInsert(&L, i, e)
初始条件:线性表L已存在
操作结果:在线性表L中的第i个位置插入新元素e,L的长度加1。
ListDelete(&L, i, &e)
初始条件:线性表L已存在
操作结果:删除线性表L中第i个位置元素,并用e返回其值,L的长度减1。
DisplayList(L)
初始条件:线性表L已存在
操作结果:输出L中的所有数据元素。
}

注:顺序表可以采用静态数组的形式,完成后仍有余力的同学,尝试着使用动态数组的方式实现


编程练习:

1.La、Lb是两个分别有序的顺序表,设计一个算法并编写程序,将La、Lb合并成有序的顺序表Lc。

如:La=(1, 3, 5, 7, 9);

Lb=(2, 4, 5, 6, 8);

合并的Lc=(1, 2, 3, 4, 5, 5, 6, 7, 8, 9).

数据声明:

#define MAX_LENGTH 100

// 一些链表的操作,可以调用上一题中实现的操作
// 有能力的使用动态数组,结构可参考书上P22.
typedef struct{
int data[MAX_LENGTH];
int length;
}SqList;

void MergeList(SqList La, SqList Lb, SqList &Lc){
//代码实现
}

int main(){
//定义La、Lb
//调用合并方法
//输出合并结果
}

2.有一个长度为n顺序表a,设计一个算法,将表中所有的重复元素删除.

如:a=(1, 1, 2, 3, 4, 5, 7, 8, 3, 4, 6, 9);

处理后a=(1, 2, 3, 4, 5, 7, 8, 6, 9)