数据结构-顺序表结构的实现C语言(全代码)
设计出顺序表结构的相关函数库,以便在程序设计中调用。
-
题目要求
(1)包括线性表的各种基本函数以及常用函数(自己确定函数、函数形式及理由)
(2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。
(3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。
-
题目分析
基于在《数据结构与算法设计》课程的学习,学习物理结构之顺序存储结构,结合线性表的特点和逻辑结构以及基于线性表实际设计的基本操作。我们设计出以函数为核心、C语言实现、顺序表结构的相关数据库,并通过main主函数进行了集合,能够通过实践的演示,利用对相关函数的调用来实现相关问题解决。
这里我们选用静态存储作为数组存储方式。
这里我们需要说明顺序表结构(元素)与数组(元素)联系:
- 地址连续
- 依次存储
- 数据类型相同
- 随机存取
这里我们需要充分了解C语言中利用指针、数组名做参数进行传址方式及传值方式
这里我们设计的顺序表所完成的基本操作并以函数封装:
- 创建顺序表CreateList()
- 顺序表初始化InitList()
- 按数值进行查找LocateElem()
- 插入元素操作InsertList()
- 删除元素数值操作ListDelete ()
- 清空顺序表ClearList ()
- 打印顺序表PrintList()
最后对一些准备工作的介绍
我们使用了cstdio等6个头文件,3个宏定义进行常量和类型定义以及对顺序表数据结构的表示
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#define MaxSize 100
#define ElemType int
#define Status int
using namespace std;
typedef struct
{
ElemType data[MaxSize]
Int length;
}SqList;
-
课题设计
-
函数的模块化设计
- 顺序表插入元素
InsertList(SqList &L,int i,ElemType e)
【算法步骤】
- 判断插入位置i是否合法(1<=i<=L.length+1)
- 判断顺序表的存储空间是否已满
- 将第L.length至第i序号上的元素依次向后移动一个位置,直至空出第i个位置
- 将待插入元素e放入第i个位置
- L.length++
- 顺序表上的删除
ListDelete (SqList &L,int i)
【算法步骤】
- 判断删除位置i是否合法(1<=i<=L.length)
- 将第i+1至第L.length个的元素依次向前移动一个位置
- L.length--
这里对典型的插入和删除函数设计思路进行描述。ASL(平均查找长度)因位置不同存在较大差异。
-
函数功能的描述
CreateList(SqList &l,int n):
参数:顺序表L,顺序表长度n
功能:创建长度为n的顺序表L
时间复杂度:O(n)
操作前提:L是一个未初始化的线性表
操作结果:将L初始化为一个空的线性表
InitList(SqList &L)
参数:表L
功能:对表L进行初识化
时间复杂度:O(1)
操作前提:L是一个已初始化的空表
操作结果:建立一个非空的线性表L
InsertList(SqList &L,int i,ElemType e)
参数:表L,位置i,元素e
功能:在位置i处插入元素e
时间复杂度:O(n)
操作前提:线性表L已存在
操作结果:将元素s插入到线性表L的i位置
因篇幅问题不能全部显示,请点此查看更多更全内容