天天看点

数据结构作业--顺序表

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

基本作业

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);

继续阅读