···
//初始化表
void InitList(SqList *&L)
{
L=new SqList;//为线性表分配空间
L->length=0;
}
//销毁线性表
void DestoryList(SqList* &L)
{
delete L;//释放L指向的内存空间
}
//获取元素
bool GetElem(SqList *L,int i,ElemType &e)
{
if(i<1||i>L->length)
return false;
e=L->data[i-1];
return true;
}
//插入元素
bool ListInsert(SqList *&L,int i,ElemType e)
{
if(i<1||i>L->length)
return false;
i--;
for(int j=L->length;j>i;j--)
L->data[j] = L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
//删除元素
bool LiseDelete(SqList *&L,int i,ElemType &e)
{
if(i<1||i>L->length)
return false;
i--;
e=L->datd[i];
for(int j=i;j<L->length-1;j++)
L->data[j] = L->data[j+1];
L->length--;
return true;
}
//链表创建头节点
void InitList(LinkList *&L)
{
L=new LNode;
L->next=NULL;
}
//判断是否为空表
bool ListEmpty(LinkList *L)
{
return(L->next==NULL);
}
//求线性表长度
{
int n=0;
LinkList *p=L;
while(p->next!=NULL)
{
n++;
p=p->next;
}
return n;
}
//头插法简单链表
void CreatListF(LinkList *&L,ElemType a[],int n)
{
LinkList *s;
int i;
L=new LNode;
L->next=NULL;
for(i=0;i<n;i++){
s=new LNode;
s->data=a[i];
s->next=L->next;
L->next=s;
}
}
//尾插法建链表
void CreatListR(LinkList *&L,ElemType a[],int n)
{
LinkList *s,*r;
int i;
L=new LNode;
r=L;
for(i=0;i<n;i++)
{
s=new LNode;
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
```
#3.时间复杂度的求解
##1.定义:一个程序的空间复杂度是指运行完一个程序所需内存的大小。
##2.大O表示法:用O(n)来体现算法时间复杂度的记法。
##3.推导大O阶有一下三种规则:
- 用常数1取代运行时间中的所有加法常数
- 只保留最高阶项
- 去除最高阶的常数
##4.如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。
##5.如果算法的执行时间随着问题规模n的增长而增长,则时间复杂度可通过计算得到为O(n)、O(log n)、O(n2)……
##6.常见时间复杂度的比较
O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)<O(n!)
#2.重要概念
来源:https://www.cnblogs.com/wyjy/p/12588603.html