数据结构考研必背算法5星
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构考研必背算法5星
文档说明:本文档是针对考研专业课《数据结构》所编写的,是对考研数据结构的核心算法进行总结,我们知道,不管是统考还是非统考,都会涉及至少10分的算法题(非统考至少25分),而这些题的答案都是在一些经典算法的思想上进行改进的,本文总结出必须要熟练掌握的算法,这些算法不管是考研初期还是冲刺,都应该高度重视,只要对这些代码进行熟练掌握,才能随机应变,希望对大家有所帮助;
线性表
1.逆转顺序表中的所有元素
void Reverse(int A[ ],int n){
int i,t;
for(i=0;i t = A[i]; A[i] = A[n-i-1]; a[n-i-1] = t; } } 自我总结: 2. 删除线性表中数据域为X的所有结点; void Del_X(Linklist &L,Elemtype X){ Linklist p,q = L; p = L->next; while (P!=NULL){ if(p->data == X){ q->next = p->next; free(p); p=q->next; }else{ q = p; p = p->next; } } if(L->data == X){ q = L; L = L->next; free(q); } } 自我总结: 3.删除不带头结点单链表L中所有值为X的结点(递归) void Del_X(Linklist &L,Elemtype X){ LNode *p; if(L==NULL) return ; if(L->data == X){ P = L; L = L->next; free(p); Del_X(L,X); }else{ Del_X(L->next,X); } } 自我总结: 4.删除带头结点单链表L中所有值为X 的结点 void Del_X(Linklist &L,Elemtype X){ LNode *p = L->next,*pre = L, *q; while(P!=NULL){ if(P->data == X){ q = p; p=p->next; pre->next = p; free(q); }else{ pre = p; p=p->next; } } } 注:本算法是在无序单链表中删除满足某种条件的所有结点;如:若是要删除介于max 和min之间的所有结点,只需将if语句改为if(p->data>min&&p->data 自我总结: 5.逆转线性表(不带头) void reverse(Linklist &L){ Linklist p, q, r; p = L; q = NULL; while(p!=NULL){ r = q; q = p; p = p->next; q->next = r; } L = q; } 带头结点: Linklist reverse(Linklist L){ LNode *pre,*p=L->next,*r=p->next; p->next = NULL; while(r!=NULL){ pre = p; p = r; r = r->next; p->next = pre; } L->next = p; return L; } 自我总结: 6. 复制线性链表(递归) Linklist copy(Linklist list1){ Linklist list2; if(list1==NULL) return NULL; else{ list2 = (Linklist)malloc(sizeof(LNode)); list2 ->data = list1->data; list2 -> next = copy(list1->next); return list2; } } 自我总结: 7. 将两个按值有序排列的非空线性表合并为一个按值有序的线性表 Linklist Mergelist(Linklist L1,Linklist L2){ Linklist L3,p = L1,q = L2,r; if(L1->data <= L2->data){ L3 = L1; r = L1; p = L1->next; }else{ L3 = L2; r = L2; q = L2->next; } while(P!=NULL&&q!=NULL){ if(p->data <= q->data){ r->next = p; r = p; p = p->next; }else{ r->next = q; r = q; q = q->next; } } r->next=p!=NULL?p:q; return L3; } 自我总结: