小言_互联网的博客

数据结构笔记1

287人阅读  评论(0)

程序=数据结构 + 算法

逻辑结构:线性结构、树型结构、图结构、(集合)

存储结构的分类:顺序结构和链式结构

 

算法的性质:有穷性、确定性、可行性、输入、输出

算法的描述方法:自然语言、流程图、程序设计语言、伪代码等

算法分析:算法运行所需要的时间(时间复杂性);算法运行所需要的时间(时间复杂性)

时间复杂度:事前估计法(多用)、事后统计法

事前估计法:最好情况估计、最坏情况估计、平均情况估计、

注:时间复杂度只与算法中语句频度最大的语句(基本语句)有关, 而其它语句的时间可以不计

 

模板:函数模板、类模板

函数模板的定义:

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场