考研数据结构目录

1、顺序表(链表操作)

(1)基础单链表操作(模板)

(2)必看链表习题(常规套路)

 2、堆栈与队列

(1)栈的基本操作

(2)栈的链表操作

 后续将持续更新~

前言:首先这四个题都是考研真题,不要觉得它就难了,很有锻炼思维的作用,自我感觉都是很基础的,而且最重要的一点是如何处理这一类问题是有固定方法的。

这四个题可以说也是固定思想套路,都是建立一个新的链表进行辅助操作,在考研中算是比较公认的一种处理方法了,小伙伴们平常做题也可以使用。

补充:有些小伙伴可能说会说,“我还有更好的方法或者更简洁的代码”,当然肯定会出现这种情况,我也并不反对,但是你的代码是给阅卷老师看的,这种新建链表的方法往往结构会更清晰。

 建议:这些题小伙伴们可以先自己独立思考一下,建议先在脑子里有自己的动态想法

目录

1、倒置链表

2、合并有序链表

3、将链表中所有负数结点移动到所有整数之前

4、将最小节点移动到第一个节点的前面

5、完整运行代码

1、倒置链表

//倒置链表
void reverse(NODE * head){ //方法:建议一个新的节点专门存 //注意:这里给出的head没有头节点滴 NODE * head_a,*p,*s;head_a=(NODE*)malloc(sizeof(NODE));head_a->next=NULL;s=head_a;p=head;while(p){//或者head->next head=p->next;//1、孤立结点p->next=s->next;//2、插到新节点后面 s->next=p;p=head; // 3、返回p指针 }head=s->next;//4、把head和head_a对接 printLink(head);
}

2、合并有序链表

//合并有序链表
void merge(NODE * head_a,NODE * head_b){NODE * head_c,*p1,*p2,*s;head_c=(NODE*)malloc(sizeof(NODE));head_c->next=NULL;s=head_c;p1=head_a;p2=head_b;while(p1&&p2){if(p1->data<p2->data){//p小,先排head_a链表 head_a=p1->next;//孤立p1->next=s->next;s->next=p1;s=p1;p1=head_a; }else{head_b=p2->next;p2->next=s->next;s->next=p2;s=p2;p2=head_b;}if(p1){s->next=p1;}else{s->next=p2;}}    printLink(head_c);
} 

3、将链表中所有负数结点移动到所有整数之前

//把负数移动到所有整数之前
void move(NODE * head){//初始化 NODE * head_a,*p,*q,*s;head_a=(NODE*)malloc(sizeof(NODE));s=head_a;head_a->next=NULL;//为便于操作 给它原始链表加一个头节点p= (NODE*)malloc(sizeof(NODE));p->next=head;head=p;//进入正题 while(p->next){if(p->next->data<0){q=p->next;p->next=q->next;//最后q(也就是负数节点)被孤立出来 q->next=s->next;s->next=q;s=q;}else{p=p->next;}}//最后把head_a上所有的负数节点加到原链表上q->next=head->next;//最后是q在head_a的尾部 free(head);//把原来多余的头节点释放掉 head_a=head_a->next;//把新建的头结点孤立掉 printLink(head_a);
}

4、将最小节点移动到第一个节点的前面

//把最小节点移动到第一个节点的前面
void moveMin(NODE * head){NODE *p,*q,*s;//为原来节点加一个头结点 p=(NODE*)malloc(sizeof(NODE));p->next=head;head=p;//进入正题 p=head; q=head->next;while(q->next){if(q->next->data<p->next->data){p=q;}q=q->next;}//最后p为最小值的 前一个节点s=p->next;//s就是最小值的节点p->next=s->next;//孤立s节点s->next=head->next; head->next=s;head=head->next;//删除head头结点printLink(head);
} 

5、完整运行代码

#include<stdio.h>
typedef struct node{int data;struct node * next;
}NODE;
//打印节点
void printLink(NODE * head){//打印结点 NODE * p;p=head;while(p->next){printf("%2d  ",p->data);p=p->next;}printf("%d\n",p->data);//上面那个循环不会打印最后一个,把最后一个也打印
}
//创建节点
NODE * creat(){NODE * head,*p,*s;head=(NODE*)malloc(sizeof(NODE));p=head;head->next=NULL;int flag=-1;for(int i=1;i<=6;i++){//创建一个顺序链表 s=(NODE*)malloc(sizeof(NODE));s->data=flag*i;s->next=p->next;p->next=s;p=s;flag=-flag;}if(head->next)//把头节点摘掉 head=head->next; printLink(head);return head;
} //倒置链表
void reverse(NODE * head){ //方法:建议一个新的节点专门存 //注意:这里给出的head没有头节点滴 NODE * head_a,*p,*s;head_a=(NODE*)malloc(sizeof(NODE));head_a->next=NULL;s=head_a;p=head;while(p){//或者head->next head=p->next;//1、孤立结点p->next=s->next;//2、插到新节点后面 s->next=p;p=head; // 3、返回p指针 }head=s->next;//4、把head和head_a对接 printLink(head);
}
//合并有序链表
void merge(NODE * head_a,NODE * head_b){NODE * head_c,*p1,*p2,*s;head_c=(NODE*)malloc(sizeof(NODE));head_c->next=NULL;s=head_c;p1=head_a;p2=head_b;while(p1&&p2){if(p1->data<p2->data){//p小,先排head_a链表 head_a=p1->next;//孤立p1->next=s->next;s->next=p1;s=p1;p1=head_a; }else{head_b=p2->next;p2->next=s->next;s->next=p2;s=p2;p2=head_b;}if(p1){s->next=p1;}else{s->next=p2;}}    printLink(head_c);
}
//把负数移动到所有整数之前
void move(NODE * head){//初始化 NODE * head_a,*p,*q,*s;head_a=(NODE*)malloc(sizeof(NODE));s=head_a;head_a->next=NULL;//为便于操作 给它原始链表加一个头节点p= (NODE*)malloc(sizeof(NODE));p->next=head;head=p;//进入正题 while(p->next){if(p->next->data<0){q=p->next;p->next=q->next;//最后q(也就是负数节点)被孤立出来 q->next=s->next;s->next=q;s=q;}else{p=p->next;}}//最后把head_a上所有的负数节点加到原链表上q->next=head->next;//最后是q在head_a的尾部 free(head);//把原来多余的头节点释放掉 head_a=head_a->next;//把新建的头结点孤立掉 printLink(head_a);
}
//把最小节点移动到第一个节点的前面
void moveMin(NODE * head){NODE *p,*q,*s;//为原来节点加一个头结点 p=(NODE*)malloc(sizeof(NODE));p->next=head;head=p;//进入正题 p=head; q=head->next;while(q->next){if(q->next->data<p->next->data){p=q;}q=q->next;}//最后p为最小值的 前一个节点s=p->next;//s就是最小值的节点p->next=s->next;//孤立s节点s->next=head->next; head->next=s;head=head->next;//删除head头结点printLink(head);
}
int main(){NODE * head,*p,*s;head=creat();
//  reverse(head);move(head);
}

考研数据结构——必看链表真题(常规套路)相关推荐

  1. 408计算机考研--数据结构--2020年统考真题(C语言)

    2020年408统考真题(C语言) 一.题目描述 定义三元组(a,b,c)(a.b.c均为正数)的距离D=|a-b|+|b-c|+|c-a|.给定3个非空整数集合S1.S2.S3,按升序分别存储在3个 ...

  2. 清华大学912计算机考研真题,2021清华大学计算机考研912计算机基础综合真题回忆版...

    原标题:2021清华大学计算机考研912计算机基础综合真题回忆版 数据结构 第一题复杂度11分,只记得第二问是f(n)=3f(n/9)+o(1),问f(n)复杂度,并证明.第一问是比较两个复杂度,一个 ...

  3. 2010-2019考研英语二 新题型真题+答案

    2010-2019考研英语二 新题型真题+答案 链接: https://pan.baidu.com/s/1C6Z4aabpVhd08YiwfgB9fg 提取码: gi32 复制这段内容后打开百度网盘手 ...

  4. 2010-2019考研英语二 完型真题+答案

    2010-2019考研英语二 完型真题+答案 链接: https://pan.baidu.com/s/12P_ssAbB8dIT5QGS1Jb2Uw 提取码: 1aqb 复制这段内容后打开百度网盘手机 ...

  5. 2022考研肖秀荣《讲真题》pdf

    2022考研肖秀荣<讲真题>pdf

  6. 中大计算机考研复试题目集锦,2016中山大学考研复试各学院复试真题及经验汇总...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 2016中山大学考研复试各学院复试真题及经验汇总 2016考研初试结束了,距离考研复试的时间一天天逼近,大部分的考生都是第一次参加复试,鸿儒中大考研网整理 ...

  7. 考研961数据结构c语言版真题,严蔚敏数据结构C语言版考研真题库

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 严蔚敏<数据结构>(C语言版)配套题库[考研真题精选(部分视频讲解)+章节题库] 下载来源:http://fangcai.100xuexi.c ...

  8. 【7万字干货】最新Java实习必看面试两百题解析

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_41112238/article/ ...

  9. 2023年南京大学软件工程考研上岸必看复习经验

    双非一战跨考南大软工842上岸经验贴(初试+复试) 一.择校 南大软工学科评级为A,21年专硕计划共收240人,推免116人,剩下124统招名额(22年统招名额下降到98左右,不过新增苏州校区,苏州校 ...

最新文章

  1. mysql怎么设置计划任务_mysql设置定时任务
  2. 智能音箱二战:国内Q1出货量5倍增长,BAX上屏、扩类、做家居
  3. keepalived(8)——http、tcp检测
  4. Gartner 最新预测:全球云收入将超非云收入,云原生、低代码、SASE 继续普及
  5. 我的世界变betty指令_Betty Hacker将开放式硬件电子产品嵌入蛋糕中
  6. 微服务链路追踪_.NET Core微服务:分布式链路追踪系统分享
  7. 冯诺依曼提出的三个计算机改进理论,冯诺依曼体系结构的计算机..docx
  8. music 算法 c语言,频率估计方法——MUSIC和ROOT-MUSIC算法(附代码)
  9. 2节串联锂电池充电管理芯片IC,5V,12V升降压解决方案
  10. 物联网:Android端控制ZigBee实现生产环境自动控制
  11. 服务器排队系统怎么做,多服务器排队系统的平均排队时间的近似分析
  12. Spring Security(3)
  13. 电路中的正弦信号 Sin
  14. aws linux使用ssh登陆_在Mac上通过ssh连接到amazon aws linux服务器
  15. 数学7大定理比较,五点(驻、极、最、拐、间)比较,求极值问题(求根验证负数形式)
  16. python画思维导图的英文_如何使用python做出思维导图
  17. slf4j无法写入日志文件问题
  18. Dubbo服务端服务发布(一)Invoker创建
  19. linux 查看系统版本信息
  20. 前端实现轮播图的三种方法。

热门文章

  1. linux系统下如何切换到root用户
  2. 【Android -- 动画】Activity 转场动画
  3. 八核8K瑞芯微旗舰级RK3588核心板
  4. 【我的OpenGL学习进阶之旅】OpenGL ES 3.0新功能
  5. Linux LXD 最新版4.0 入门指南(1)
  6. Android平台的信息推送实现
  7. 南邮微机实验 串行口的测试
  8. 基于Java毕业设计超市货品进销存系统后台源码+系统+mysql+lw文档+部署软件
  9. library netcdf 路径_中国科学院超级计算青岛分中心NETCDF4安装手册
  10. 并发编程(十三):阻塞队列之ArrayBlockingQueue