目录:

1.1 统计出单链表HL中结点的值等于给定值X的结点数

2.1 设有一组初始记录关键字序列(K1,K2,… Kn),要求设计一个算法能够在 O(n) 的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于 Ki ,右半部分的每个关键字均大于等于 Ki

2.2 设有两个集合A和集合B,要求设计生成集合C=A∩B的算法,其中集合A、B和C用链式存储结构表示

3.1 设计在单链表中删除值相同的多余结点的算法

3.2 设计一个求结点 x 在二叉树中的双亲结点算法

4.1 设单链表中有仅三类字符的数据元素(大写字母、数字和其它字符),要求利用原单链表中结点空间设计出三个单链表的算法,使每个单链表只包含同类字符

4.2 设计在链式存储结构上交换二叉树中所有结点左右子树的算法

4.3 在链式存储结构上建立一颗二叉排序树

5.1 设计判断两个二叉树是否相同的算法

5.2 设计两个有序单链表的合并排序算法

6.1 设计在顺序有序表中实现二分查找的算法

6.2 设计判断二叉树是否为二叉排序树的算法

6.3 在链式存储结构上设计直接插入排序

7.1 设计在链式结构上实现简单选择排序

7.2 设计在顺序存储结构上实现求子串算法

7.3 设计求结点在二叉排序树中层次的算法

8.1 设计一个在链式存储结构上统计二叉树中结点个数的算法

8.2 设计一个算法将无向图的邻接矩阵转为对应邻接表的算法

9.1 设计计算二叉树中所有结点值之和的算法

9.2 设计将所有奇数移到所有偶数之前的算法

9.3 设计判断单链表中元素是否是递增的算法

10.1 设计在链式存储结构上合并排序的算法

10.2 设计在二叉排序树上查找结点 X 的算法

10.3 设关键字序列(k1,k2,…,kn-1)是堆,设计算法将关键字序列(k1,k2,…,kn-1,x)调整为堆

1.1 统计出单链表HL中结点的值等于给定值X的结点数

int CountX(LNode *HL, ElementType X){LNode *p;int count = 0;if(HL == NULL)    return 0;p = HL->next;while(p != NULL){if(p->data == X)++count;p = p->next;}return count;
}

2.1 设有一组初始记录关键字序列(K1,K2,… Kn),要求设计一个算法能够在 O(n) 的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于 Ki ,右半部分的每个关键字均大于等于 Ki

void quickpass(int r[], int s,int t)
{int i=s, j=t, x=r[s];while(i<j){ while (i<j &&r[j]>x) j=j-1; if (i<j) {r[i]=r[j];i=i+1;}while (i<j && r[i]<x) i=i+1;if (i<j) {r[j]=r[i];j=j-1;}}r[i]=x;
}

2.2 设有两个集合A和集合B,要求设计生成集合C=A∩B的算法,其中集合A、B和C用链式存储结构表示

typedef struct node {int data;struct node *next;}lklist;
void intersection(lklist*ha,lklist *hb,lklist *&hc)
{lklist *p,*q,*t;for(p=ha,hc=0;p!=0;p=p->next){ for(q=hb;q!=0;q=q->next) {if (q->data==p->data) break;}if(q!=0){t=(lklist*)malloc(sizeof(lklist)); t->data=p->data;t->next=hc; hc=t;}}
}

3.1 设计在单链表中删除值相同的多余结点的算法

typedef int datatype;
typedef struct node
{datatype data;struct node *front, *next;
}lklist;
void delredundant(lklist *&head)
{lklist *p,*q,*s;for(p=head; p!=0; p=p->next){for(q=p->next, s=q; q!=0;){if(q->data==p->data){s->next=q->next; free(q); q=s->next;}else{s=q; q=q->next;}}}
}

3.2 设计一个求结点 x 在二叉树中的双亲结点算法

typedef struct node {datatype data; struct node *lchild,*rchild;} bitree;
bitree *q[20]; int r=0,f=0,flag=0;
void preorder(bitree *bt, char x)
{if (bt!=0 && flag==0)if (bt->data==x) { flag=1; return;}else {r=(r+1)% 20; q[r]=bt; preorder(bt->lchild,x); preorder(bt->rchild,x); }
}
void parent(bitree *bt,char x)
{int i;preorder(bt,x);for(i=f+1; i<=r; i++) {if (q[i]->lchild->data==x || q[i]->rchild->data) break;}if (flag==0) printf("not found x\n");else if (i<=r) printf("%c",bt->data); else printf("not parent");
}

4.1 设单链表中有仅三类字符的数据元素(大写字母、数字和其它字符),要求利用原单链表中结点空间设计出三个单链表的算法,使每个单链表只包含同类字符

typedef char datatype;
typedef struct node {datatype data;struct node *next;}lklist;
void split(lklist *head,lklist*&ha,lklist *&hb,lklist *&hc)
{lklist *p; ha=0,hb=0,hc=0;for(p=head;p!=0;p=head){head=p->next; p->next=0;if (p->data>='A' && p->data<='Z') {p->next=ha;ha=p;}else if (p->data>='0' && p->data<='9'){p->next=hb; hb=p;} else {p->next=hc; hc=p;}}
}

4.2 设计在链式存储结构上交换二叉树中所有结点左右子树的算法

typedef struct node{ int data;struct node *lchild,*rchild;}Bitree;
void swapbitree(Bitree *bt)
{Bitree *p;if(bt==0){return;}swapbitree(bt->lchild);swapbitree(bt->rchild);p=bt->lchild;bt->lchild=bt->rchild;bt->rchild=p;
}

4.3 在链式存储结构上建立一颗二叉排序树

#define n10
typedefstruct node{int key; struct node *lchild,*rchild;}bitree;
voidbstinsert(bitree *&bt,int key)
{if (bt==0){bt=(bitree*)malloc(sizeof(bitree)); bt->key=key;bt->lchild=bt->rchild=0;}else if (bt->key>key) bstinsert(bt->lchild,key);else bstinsert(bt->rchild,key);
}
voidcreatebsttree(bitree *&bt)
{int i;for(i=1;i<=n;i++)bstinsert(bt,random(100));
}

5.1 设计判断两个二叉树是否相同的算法

typedef struct node(datatype data; struct node *lchild, *rchild;)bitree;
int judgebitree(bitree *bt1,bitree *bt2)//判断两个二叉树是否相同。
{if (bt1==0 && bt2==0)//两棵树对应位置都为空返回1return 1;else if (bt1==0 || bt2==0 ||bt1->data!=bt2->data) //两棵树的当前节点只有一个为空或者两棵树的当前节点的值不同。return 0;else return judgebitree(bt1->lchild,bt2->lchild)*judgebitree(bt1->rchild,bt2->rchild);
}

5.2 设计两个有序单链表的合并排序算法

Typedef struct Lnode{Datatype data;Struct Lnode *next;
}Lnode,*linklist;
Void Merge_List(Linklist &la,linklist &b){LNode *pa=la->next,*pb=lb->next,*r;   //r指针防止断链La->next=null;                    While(pa&&pb){If(pa->data >= pb->data){r=pa->next;                   Pa->next=la->next;La->next=pa;Pa=r;                  //pa重新指向未排序位置}If(pa->data <= pb->data){r=pb->next;                  Pb->next=la->next;La->next=pb;Pb=r;                  }}If(pa)  pb=pa;           While(pb){               r=pb->next;Pb->next=la->next;La->next=pb;Pb=r;}Free(lb);                //释放掉lb的空闲空间
}

6.1 设计在顺序有序表中实现二分查找的算法

struct record{int key; int others;};
int bisearch(struct record r[], int k)
{int low=0, mid, high=n-1;while(low<=high){mid=(low+high)/2;if(r[mid].key==k){return (mid+1);}else if(r[mid].key>k){high=mid-1;}else{low=mid+1;}}return 0;
}

6.2 设计判断二叉树是否为二叉排序树的算法

//递归方式
KeyType predt=-32767;
int JudgeBST(BisTree bt)
{int b1, b2;if(bt==NULL){return 1;}else{b1=JudgeBST(bt->lchild); //递归if(b1==0 || predt>=bt->data)return 0;predt=bt->data;b2=JudgeBST(bt->rchild);return b2;  }
}
//非递归方式
int InOrderTraverse(BiTree T)
{BiTree p;p=T;while(p||!StackEmpty(S)){if(p){Push(S,p);if(p->data>p->lchild->data)p=p->lchild;else return 0;}else{Pop(S,p);cout<<p->data<<" ";if(p->data<p->rchild->data)p=p->rchild;else return 0;}}return 1;
}

6.3 在链式存储结构上设计直接插入排序

void straightinsertsort(lklist *&head)
{lklist *s,*p,*q;int t;if(head==0 || head->next==0) return ;else for(q=head, p=head->next; p!=0; p=q->next){for(s=head; s!=q->next; s=s->next){if(s->data > p->data) break;if(s==q->next) q=p;else{q->next=p->next;p->next=s->next;s->next=p;t=p->data;p->data=s->data;s->data=t;}}   }
}

7.1 设计在链式结构上实现简单选择排序

typedef struct LNode{int data;struct LNode *next}*Linklist;
void  simpleselectSort(Linklist *&head)
{Linklist *p,*q,*s;int min,t;if(head==0 || head->next==0){return;}for(q=head;q!=0;q=q->next){min=q->data;s=q;for(p=q->next;p!=0;p=p->next){if(min>p->data){min=p->data;s=p;}}if(s!=q){t=s->data;s->data=q->data;q->data=t;}}
}

7.2 设计在顺序存储结构上实现求子串算法

void subString(char s[],int start,long count,char t[])
{long i,j,length=strlen(s);if(start<1 || start>length){printf("The copy position is wrong!\n");}else if(start+count-1>length){printf("Too characters to be copied!\n");}else{for(i=start-1,j=0;i<start+count-1;i++,j++){t[j]=s[i];}t[j]='\0';}
}

7.3 设计求结点在二叉排序树中层次的算法

int lev=0;
typedef struct node
{int key;struct node *lchild,*rchild;
}bitree;
void level(bitree *bt, int x)
{if(bt!=0){lev++;if(bt->key==x){return;}else if(bt->key>x){level(bt->lchild, x);}}else{level(bt->rchild, x);}
}

8.1 设计一个在链式存储结构上统计二叉树中结点个数的算法

voidcountnode(bitree *bt,int &count)
{if(bt!=0){count++;countnode(bt->lchild,count); countnode(bt->rchild,count);}
}

8.2 设计一个算法将无向图的邻接矩阵转为对应邻接表的算法

typedef struct {intvertex[m]; int edge[m][m];}gadjmatrix;
typedef structnode1{int info;int adjvertex; struct node1 *nextarc;}glinklistnode;
typedef structnode2{int vertexinfo;glinklistnode *firstarc;}glinkheadnode;voidadjmatrixtoadjlist(gadjmatrix g1[ ],glinkheadnode g2[ ])
{int i,j;glinklistnode *p;for(i=0;i<=n-1;i++)g2[i].firstarc=0;for(i=0;i<=n-1;i++)for(j=0;j<=n-1;j++)if(g1.edge[i][j]==1){p=(glinklistnode*)malloc(sizeof(glinklistnode)); p->adjvertex=j;p->nextarc=g[i].firstarc; g[i].firstarc=p;p=(glinklistnode*)malloc(sizeof(glinklistnode)); p->adjvertex=i;p->nextarc=g[j].firstarc; g[j].firstarc=p;}
}

9.1 设计计算二叉树中所有结点值之和的算法

voidsum(bitree *bt,int &s)
{if(bt!=0){s=s+bt->data; sum(bt->lchild,s);sum(bt->rchild,s);}
}

9.2 设计将所有奇数移到所有偶数之前的算法

voidquickpass(int r[], int s, int t)
{int i=s,j=t,x=r[s];while(i<j){while (i<j && r[j]%2==0)j=j-1;  if (i<j) {r[i]=r[j];i=i+1;}while (i<j && r[i]%2==1)i=i+1; if (i<j) {r[j]=r[i];j=j-1;}}r[i]=x;
}

9.3 设计判断单链表中元素是否是递增的算法

intisriselk(lklist *head)
{if(head==0||head->next==0)return(1);elsefor(q=head,p=head->next;p!=0; q=p,p=p->next)if(q->data>p->data) return(0);return(1);
}

10.1 设计在链式存储结构上合并排序的算法

voidmergelklist(lklist *ha,lklist *hb,lklist *&hc)
{lklist *s=hc=0;while(ha!=0 && hb!=0)if(ha->data<hb->data){if(s==0)hc=s=ha; else {s->next=ha; s=ha;};ha=ha->next;}else {if(s==0) hc=s=hb; else {s->next=hb; s=hb;};hb=hb->next;}if(ha==0) s->next=hb; else s->next=ha;
}

10.2 设计在二叉排序树上查找结点X的算法

bitree*bstsearch1(bitree *t, int key)
{bitree *p=t;while(p!=0) if (p->key==key)return(p);else if (p->key>key) p=p->lchild; else p=p->rchild;return(0);
}

10.3 设关键字序列(k1,k2,…,kn-1)是堆,设计算法将关键字序列(k1,k2,…,kn-1,x)调整为堆

void adjustheap(int r[ ],int n)
{int j=n,i=j/2,temp=r[j-1];while (i>=1) if(temp>=r[i-1])break; else{r[j-1]=r[i-1]; j=i; i=i/2;}r[j-1]=temp;
}

数据结构算法【考研】相关推荐

  1. 计算机考研数据结构算法模板

    计算机考研数据结构算法模板 前言 临近考研,想给考研党们分享一些比较通用的算法模板,让复习更高效一点.如果备考时间足够长,备考人应该有大量时间刷大量习题,会有自己总结的算法模板,笔者文章参考了王道考研 ...

  2. 微软等数据结构+算法面试100题全部答案集锦

    微软等数据结构+算法面试100题全部答案集锦 作者:July.阿财. 时间:二零一一年十月十三日. 引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一周年 ...

  3. 微软公司等数据结构+算法面试100题2010版全部出炉

    微软等公司数据结构+算法面试100题2010版首次完整亮相                         作者:July.2010年12月6日. 更新:现今,这100题的答案已经全部整理出来了,微软 ...

  4. 22考研计算机专业课——数据结构【❤️考研复习指导❤️】

    本次复习指导是基于我在21考研初试中我的王道考研数据结构这本书,加上[数据结构与算法设计]这本教材,书上和笔记本上都记满了笔记和重难点,所以在此回顾这些基本知识点,不能做到我当时的面面俱到,但是尽量完 ...

  5. 考研专业课c语言与数据结构,南开大学816 C语言与数据结构2018考研专业课大纲...

    南开大学816 C语言与数据结构2018考研专业课大纲 2017-09-29 14:41 | 考研集训营 南开大学2018考研专业课大纲已经公布,每个学校自专业课考试大纲及专业课考试内容不一样,小编会 ...

  6. 数据结构(考研笔记)

    参考 原文链https://blog.csdn.net/qq_55593227/article/details/123598044 文章目录 第一章.绪论 1.1. 数据结构 1.2. 算法 1.2. ...

  7. 微软等数据结构+算法面试100题全部答案完整亮相

    重磅分享:微软等数据结构+算法面试100题全部答案完整亮相 来源: 王永刚的日志 本文转载自CSDN大牛的一篇博客:http://blog.csdn.net/v_july_v/article/deta ...

  8. 微软公司等数据结构+算法面试100题

    微软等公司数据结构+算法面试100题(第1-100题)首次完整亮相 注:本文转自July的博客:http://blog.csdn.net/v_july_v/article/details/605728 ...

  9. 数据结构算法书籍推荐(转贴)

    如果计算机系只开三门课,那么这三门课就一定是:离散数学,数据结构与算法, 编译原理.如果只开一门课,那剩下的就一定是:数据结构与算法.Niklaus Wirth说:算法+数据结构=程序,不说废话了,下 ...

  10. 微软等数据结构+算法面试100题

    转载于:http://blog.csdn.net/garfielder007/article/details/48931183 微软等数据结构+算法面试100题全部答案集锦 作者:July.阿财. 时 ...

最新文章

  1. JAVA偏向锁的什么时候释放_Java中的偏向锁
  2. [DP] LGTB 玩THD (复杂状态DP)
  3. 视频和视频帧:FFMPEG 硬件解码API介绍
  4. 项目中引入composer包
  5. P4555-[国家集训队]最长双回文串【Manacher】
  6. C语言 goto 语句 - C语言零基础入门教程
  7. HTML 5 画布
  8. navcat定时备份mysql_MySQL——定时备份,保留最新31天的数据
  9. 全球顶级银行资管子公司的启示
  10. jks签名文件转pk8
  11. ECSHOP商城SEO优化商城更新内容后将页面链接自动推送给百度
  12. .NET反编译工具Reflector及插件
  13. 图像分割之(四)OpenCV的GrabCut函数使用和源码解读
  14. 安装固态硬盘后黑屏如何解决?
  15. 互联网应用的特点及其架构演变
  16. 抖音seo账号矩阵霸屏系统源码/账号矩阵系统搭建部署
  17. python3学习笔记01
  18. 第二章 编写MBR主引导记录
  19. GBU610-ASEMI智能家居整流桥GBU610
  20. 计算机原理实验存储器,计算机组成原理实验存储器.pptx

热门文章

  1. matlab 神经网络设计多层隐含层_[rbf神经网络]请教关于MATLAB中RBF神经网络隐含层神经元个数的问题...
  2. 电脑配件 - 机械键盘的由来, 与普通键盘的区别以及如何选购及使用维护 - 学习/实践
  3. 对接海康威视ehome踩过的坑总结
  4. 对VC++下Debug模式和Release模式的简要分析
  5. 一连发布三个版本,Boot要上天?
  6. 5个典型实例告诉你:什么是数据可视化
  7. 关于阿里巴巴编码规范(Java)认证
  8. Matplotlib常见图形绘制(折线图、散点图 、柱状图 、直方图 、饼图 、条形图)
  9. Android项目之二手交易淘学院APP
  10. 集美大学第七届团体程序设计天梯赛第二场排位赛题解