数据结构考研必背算法5星

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

自我总结:

相关文档
最新文档