··· //初始化表 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