程序=数据结构 + 算法
逻辑结构:线性结构、树型结构、图结构、(集合)
存储结构的分类:顺序结构和链式结构
算法的性质:有穷性、确定性、可行性、输入、输出
算法的描述方法:自然语言、流程图、程序设计语言、伪代码等
算法分析:算法运行所需要的时间(时间复杂性);算法运行所需要的时间(时间复杂性)
时间复杂度:事前估计法(多用)、事后统计法
事前估计法:最好情况估计、最坏情况估计、平均情况估计、
注:时间复杂度只与算法中语句频度最大的语句(基本语句)有关, 而其它语句的时间可以不计
模板:函数模板、类模板
函数模板的定义:
template <模板形参表>
返回值类型 函数名(参数表){
函数体
}
类模板的定义:
template <模板形参表>
class 类模板名
{
成员的声明;
}
类模板成员函数的定义:
template<模板形参表>
返回值类型 类模板名<形参名表>::成员函数名(参数表)
{
成员函数体
}
注:参数必须实例化
顺序表:
插入:
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;}
优点:
1)无需为表示结点间的逻辑关系而增加额外的存储空间
2)可方便地随机存取表中的任一元素
缺点:
1)插入或删除运算不方便
2)只能预先进行静态分配
链式结构储存:单链表、双向链表、循环链表等
单链表:
头插法:
template <class T>
LinkList<T>:: LinkList(T a[ ], int n) {
first=new Node<T>; //生成头结点
first->next=NULL; Node<T> *s;
for (int i=0; i<n; i++){
s=new Node<T>;
s->data=a[i]; //为每个数组元素建立一个结点
s->next=first->next;
first->next=s; }
}
尾插法:
template <class T>
LinkList<T>:: LinkList(T a[ ], int n) {
Node<T> *r,*s; //尾指针
first=new Node<T>; //生成头结点
r=first;
for (int i=0; i<n; i++) {
s=new Node<T>;
s->data=a[i]; //为每个数组元素建立一个结点
r->next=s; r=s; //插入到终端结点之后 }
r->next=NULL; //单链表建立完毕,将终端结点的指针域置空 }
补充不带头结点的单链表的构造:
头插法:
{first=NULL;
for(int i=0;i<n;i++){
s=new node<T>;
s->data=a[i];
s->next=first;
first=s; }
}
尾插法:
node<T> *r;
head=NULL;
if(n<=0)return;
s=new node<T>;
s->data=a[0];
s->next=head;
head=s;
r=head;for(int i=1;i<n;i++){
s=new node<T>;
s->data=a[i];
r->next=s;
r=s; }
转载:https://blog.csdn.net/qq_43236424/article/details/100934332
查看评论