
数据结构算法(考研常用)
参考王道数据结构和林碧英版数据结构
vener__
软件没开消息通知,看缘分回复
展开
-
数据结构基本操作的复杂度汇总
1.顺序表插入操作时间复杂度最好O(1),最坏O(n),平均O(n)移动结点的平均次数n/2删除操作时间复杂度最好O(1),最坏O(n),平均O(n)移动结点的平均次数(n-1)/2按值查找时间复杂度最好O(1),最坏O(n),平均O(n)移动结点的平均次数(n+1)/22.单链表头插法O(n) 尾插法O(n) 按序查找O(n) 按值查找O(n) 插入 删除其中插入和删除操作,指定结点O(1),需要从头查找则花费主要用于查找O(n)3.二叉树二叉树的原创 2020-11-30 16:25:34 · 3031 阅读 · 1 评论 -
递增单链表的合并
1.合并后生成新的链表void merge(LinkList A,LinkList B,LinkList &C){ LNode *pa,*pb,*rc,*s; pa=A->next;pb=B->next; InitLinkList(C); rc=Lc; while(pa&&pb) { if(pb->data<=pa->data) { s=(LNode*)malloc(sizeof(LNode)); s->da原创 2020-11-28 20:09:45 · 440 阅读 · 0 评论 -
表达式二叉树的计算
double culexp(BiTree T){ double result,a,b; if(T) { a=culexp(T->lchild); b=culexp(T->rchild); switch(T->data) { case'+':return a+b; case'-':return a-b; case'*':return a*b; case'/':if(b!=0)return a/b; else printf(.原创 2020-10-13 15:56:31 · 262 阅读 · 0 评论 -
归并排序
void MergeSort(ElemType A[],int low,int high){ if(low<high) { int mid=(low+high)/2; MergeSort(A,low,mid); MergeSort(A,mid+1,high); Merge(A,low,mid,high); }}ElemType *B=(ElemType*)malloc((n+1)*sizeof(Elemtype));void Merge(ElemType A[],int.原创 2020-09-15 16:23:32 · 156 阅读 · 0 评论 -
基于选择的排序
1.简单选择排序void SelectSort(ElemType A[],int n){ for(i=0;i<n-1;i++) { min=i; for(j=i+1;j<n;j++) if(A[j]<A[min]) min=j; if(min!=i) swap(a[i],A[min]); }}2.堆排序void HeapSort(ElemType A[],int len){ BuildMaxHeap(A,len); for(i原创 2020-09-15 15:40:11 · 269 阅读 · 0 评论 -
基于交换的排序
1.冒泡排序void BubbleSort(ElemType A[],int n){//从后往前,第一个元素是A[0] bool flag; for(i=0;i<n-1;i++) { flag=false; for(j=n-1;j>i;j--) if(A[j-1]>a[j]) { swap(A[j-1],A[j]); falg=true; } if(flag==false) return; }}void Bubble原创 2020-09-14 17:00:25 · 222 阅读 · 0 评论 -
基于插入的排序
1.直接插入排序void InsertSort(ElemType A[],int n){ int i,j; for(i=2;i<n;i++) if(A[i]<A[i-1])//这个判断可以没有,加上可以减少一次赋值 { A[0]=A[i];//哨兵 for(j=i-1;A[0]<A[j];--j) A[j+1]=A[j]; A[j+1]=A[0]; }}2.折半插入排序void Insertsort(ElemType A[],i原创 2020-09-14 16:09:33 · 150 阅读 · 0 评论 -
二叉排序树(BST)的存储结构及基本操作
1.存储结构定义typedef struct BSTNode{ ElemType data; Struct *lchild,*rchild;}BSTNode,*BSTree;2.查找BSTNode *BST_Search(BSTree T,ElemType key){ while(T!=NULL&&key!=T->data) { if(key<T->data) T=T->lchild; else T=T->rchi原创 2020-09-13 16:33:44 · 2031 阅读 · 0 评论 -
顺序查找(带哨兵)和折半查找
typedef struct{ ElemType *elem; int TableLen;}SeqList;1.顺序查找(带哨兵)int Search(SeqList L,ElemType key){ L.elem[0]=key;//哨兵 for(i=L.TableLen;ST.elem[i]!=key;--i); return i;}2.折半查找int Binary_Search(SeqList L,ElemType key){ int low=0,high=L..原创 2020-09-13 15:07:52 · 823 阅读 · 0 评论 -
拓扑排序-用栈实现(附带邻接表图的存储结构定义)
#define MaxVertexNum 100//最大顶点数目typedef struct ArcNode{//边表结点 int adjvex; struct ArcNode *next; InfoType info;//权值}ArcNode;typedef struct VNode{//顶点表结点 VertexType data; ArcNode *first;//指向第一条依附该顶点的弧}VNode,AdjList[MaxVertexNum];typedef struct{ A.原创 2020-09-03 17:04:53 · 911 阅读 · 0 评论 -
图的遍历
1.广度优先搜索bool visited[MaxVertexNum]//访问标记void BFSTraverse(Graph G){ for(i=0;i<G.vexnum;++i) visitrd[i]=false; InitQueue(Q); for(i=0;i<G.vexnum;++i) if(!visited[i])//每个连通分量调用一次 BFS(G.i);}void BFS(Graph G,int v){ visit(v); visited[v]原创 2020-09-12 14:59:18 · 247 阅读 · 0 评论 -
图的存储结构
1.邻接矩阵法#define MaxVertexNum 100typedef char VertexType;typedef int EdgeType;typedef struct{ VertexType Vex[MaxVertexNum]; EdgeType Edge[MaxVertexNum][MaxVertexNum]; int vexnum.arcnum;}MGraph;2.邻接表法#define MaxVertexNum 100typedef struct ArcN原创 2020-09-11 16:08:03 · 118 阅读 · 0 评论 -
二叉树的各种遍历算法(递归和非递归)
1.先序遍历递归算法void PreOrder(BiTree T){ if(T!=NULL) { visit(T); PreOrder(T->lchild); PreOrder(T->rchild); }}2.先序遍历非递归算法void PreOrder2(BiTree T){ InitStack(S); BiTree p=T; while(p||IsEmpty(S)) { if(p) { visit(p); Push(S,p)原创 2020-09-11 15:53:18 · 333 阅读 · 0 评论 -
树的存储结构
1.双亲表示法#define Max_Tree_Size 100typedef struct{ Elemtype data; int parent;}PTNode;typedef struct{ PTNode nodes[Max_Tree_Size]; int n;}PTree;2.孩子链表表示法typedef struct CTNode{ int child; struct CTNode *next;}CTNode,*ChildPtr;//孩子链表上的结点type原创 2020-09-10 17:27:22 · 111 阅读 · 0 评论 -
二叉树的存储结构
1.顺序存储结构#define MaxSize 100typedef ElemType SqNoTree[MaxSize];SqBiTree bt;2.二叉链表typedef struct BiTNode{ ElemType data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;3.三叉链表typedef struct TriTNode{ ElemType data; struct Tr原创 2020-09-10 16:59:19 · 241 阅读 · 0 评论 -
括号匹配
bool BracketsCheck(char *str){ SqStack S; Initstack(S); int i=0; while(str[i]!='\0') { switch(str[i]) { case'(':Push(S,'(');break; case'[':Push(S,'[');break; case'{':Push(S,'{');break; case')':Pop(S,e); if(e!='(') ret.原创 2020-09-10 16:44:09 · 187 阅读 · 0 评论 -
队列的链式存储及其操作
1.队列的链式存储typedef struct LinkNode{ ElemType data; struct LinkNode *next;}LinkNode;typedef struct{ LinkNode *front,*rear;}LinkQueue;2.初始化void InitQueue(LikQueue &Q){ Q.front=Q.rear=(LinkNode*)nalloc(sizeof(LinkNode)); Q.front->next=N原创 2020-09-10 15:51:16 · 267 阅读 · 0 评论 -
队列的顺序存储及其操作
1.队列的顺序存储#define MaxSize 50typedef struct{ ElemType data[MaxSize]; int front,rear;}SqQueue;2.循环队列的初始化(以下均为循环队列)void InitQueue(SqQueue &Q){ Q.rear=0; Q.front=0;}3.判队空bool isEmpty(SqQueue Q){ if(Q.rear==Q.front) return true; els原创 2020-09-08 17:41:27 · 309 阅读 · 1 评论 -
栈的定义及基本操作(顺序栈)
1.顺序栈#define MaxSize 50typedef struct{ Elemtype data; int top;}SqStack;2.链栈(使用时一般不用头结点)typedef struct Linknode{ ElemType data; struct Linknode *next;} *LinkStack;以下操作均为顺序栈3.初始化void InitStack(SqStack &s){ s.top=-1;}4.判空b原创 2020-09-08 17:07:55 · 594 阅读 · 0 评论 -
一元多项式的应用
1.存储结构typedef struct{ float c;//系数 int e;//指数}Term;typedef struct PNode{ Term data; struct PNode *next;}PNode,PLink;2.插入void Insert(PLink &L,Term x){ PNode *q=L,*p=L->next,*s; while(q) { if(p!NULL&&x.e>q->data.e原创 2020-10-13 15:26:35 · 351 阅读 · 0 评论 -
线性表的链式存储(单链表)及其操作
1.单链表的定义typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*LinkList;2.头插法建立单链表LinkList List_HeadInsert(LinkList &L){ LNode *s; int x; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; scanf("%d",&x); while(x!=999)原创 2020-09-07 17:26:39 · 317 阅读 · 0 评论 -
线性表的顺序存储(顺序表)及其操作
1.静态分配#define Maxsize 50typedef struct{ ElemType data[Maxsize]; int length;}SqList;2.动态分配#define Initsize 100typedef struct{ ElemType *data; int Maxsize,length;}SeqList;L.data=(ElemType*)malloc(sizeof(ElemType)*Initsize);3.插入操作bool Li原创 2020-09-06 17:09:44 · 277 阅读 · 0 评论