**
第一章 概论
**
程序=数据结构 + 算法
对象=数据结构+算法
程序=对象+对象+……
1.用计算机求解问题一般包含两个步骤:
⑴ 抽象出问题的模型;
⑵ 求该模型的解。
2.数据:是对客观事物的符号表示,在计算机科学中是指能输入到计算机并被计算机程序处理的符号的总称。
3.数据处理:对数据进行检索、插入、删除、合并、拆分、排序、统计、计算、转换、输入、输出等的操作过程。
4.一个 ADT 的定义不涉及它的实现细节。通常包含以下内容:
抽象数据类型名
数据元素之间逻辑关系的定义
每种基本操作的接口(操作的名称和该操作的前置条件、输入、功能、输出、后置条件的定义)
ADT 抽象数据类型名
Data
数据元素之间逻辑关系的定义
Operation
操作 1
前置条件:执行此操作前数据所必须的状态
输入:执行此操作所需要的输入
功能:该操作将完成的功能
输出:执行该操作后产生的输出
后置条件:执行该操作后数据的状态
操作 2
……
……
操作 n
endADT
总而言之
算法:是为了求解问题而给出的有限的指令序列,每条指令表示一个或多个操作。即解决问题的步骤
程序:是算法的一种实现,计算机按照程序逐步执行算法,实现对问题的求解。
算法的性质 有穷性 确定性 可行性 输入(>=0) 输出(>=1)
算法分析 事前估计法 事后统计法(在算法中的某些部位插装时间函数
time (&函数名 )
测定算法完成某一功能所花费时间
)
**
第 2章 线性表
**
1.线性表的定义:是零个或多个具有相同类型的数据元素的有限序列。
数据元素的个数定义为线性表的长度 。
线性表的抽象数据类型定义
ADT List
Data
线性表中的数据元素具有相同类型,相邻元素具有前驱和后继关系
Operation
InitList
功能:线性表的初始化
DestroyList
功能:销毁线性表
Length
功能:求线性表的长度
输出: 线性表中数据元素的个数
Get
输入:元素的序号 i
功能:在线性表中取序号为 i 的数据元素
输出:如果序号合法,返回序号为 i 的元素值,否则抛出异常
Locate
输入:数据元素 x
功能:在线性表中查找值等于 x 的元素
输出:如果查找成功,返回元素 x 在表中的序号,否则返回 0
Insert
输入:插入位置 i ;待插元素 x
功能:在线性表的第 i 个位置处插入一个新元素 x
输出:若插入不成功,抛出异常
Delete
输入:删除位置 i
功能:删除线性表中的第 i 个元素
输出:若删除成功,返回被删元素,否则抛出异常
Empty
输入:无
功能:判断线性表是否为空表
输出:若是空表,返回 1 ,否则返回 0
PrintList
输入:无
功能:按位置的先后次序依次输出线性表中的元素
输出:线性表的各个数据元素
2.1.线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素
2…2 线性表的顺序存储结构-顺序表
2.3. 顺序存储的实现:一维数组存储顺序表中的数据,支持数据元素的随机访问。
const int Maxsize=100;
template <class T>
class SeqList{
private:
T data[MaxSize]; // 存放数据元素的数组
int length; // 线性表的长度
public:
SeqList ( ) ;// 无参构造函数
SeqList ( T a[ ], int n ) ; // 有参构造函数
~SeqList( ) { } // 析构函数为空
int Length ( ) {return length;} // 求线性表的长度
T Get ( int i ); // 按位查找,取线性表的第 i 个元素
int Locate ( T x ) ; // 按值查找,求线性表中值为 x 的元素序号
void Insert ( int i, T x ) ; // 在线性表中第 i 个位置插入值为 x 的元素
T Delete ( int i ) ; // 删除线性表的第 i 个元素
void PrintList ( ) ; // 遍历线性表,按序号依次输出各元素
};
template <class T>
SeqList<T>:: SeqList(T a[], int n)
{
if (n>MaxSize) throw "参数非法";
for (int i=0; i<n; i++)
data[i]=a[i];
length=n;
}
template <class T>
void SeqList<T>::Insert(int i, T x){
int j;
if (length>=MaxSize) throw "上溢";
if (i<1 || i>length+1) throw "位置";
for (j=length; j>=i; j--)
data[j]=data[j-1];
data[i-1]=x;
length++;
}
template <class T>
T SeqList<T>::Delete(int i){
int j;
T x;
if (length==0) throw "下溢";
if (i<1 || i>length) throw "位置";
x=data[i-1];
for (j=i; j<length; j++)
data[j-1]=data[j];
length--;
return x;
}
template <class T>
T SeqList<T>::Get(int i)
{
if (i<1 && i>length) throw "查找位置非法";
else return data[i-1];
}
template <class T>
int SeqList<T>::Locate(T x){
for (int i=0; i<length; i++)
if (data[i]==x)
return i+1 ; //下标为i的元素等于x,返回其序号i+1
return 0; //退出循环,说明查找失败
}