计算机考研数据结构代码题总结

链表

题目1

在带头节点的单链表L中,删除所有值为X的结点,并释放其空间,假设值为X的节点不唯一,试编写算法实现。

.算法思路

1、图解
.
2、图解含义描述

  1. 实现带头节点的单链表的删除指定值的操作。
  2. 首先需要定义三个指针,其中pre指向的是头节点,p初始化指向为L头节点的下一个节点,q作为操作指针。如图所示
  3. 算法的思想便是对单链表进行遍历
  4. 遍历过程中对p指针的数据域进行比对
  5. 相等的数据域与X相等,那么便要进行删除操作。

关键操作
1、. 删除操作首先需要将q操作指针指向p;
2、p指向next邻域
3、pre的next邻域指向p;
4、free释放q指针的空间。

核心代码如下:

if (p->data == x )
{q = p;p = p->next;pre->next = p;free(q);
}

当然若当前的数据域不等于匹配值X,那么我们需要对其进行往后继续寻找,也就是pre需要指向p,p需要指向它的下一个节点。
操作代码如下:

if (p->data == x )
{q = p;p = p->next;pre->next = p;free(q);
}else{//若没有找到Xpre = p;p = p->next;
}

完整解答代码如下:

/*** 单链表(带头节点删除数据域为X的节点)*/
//这里必须要添加一个&的引用符号,因为要对单链表进行数据的修改操作,
//必须要添加&符号
void Del_X(LinkList &L , ElemType X){//定义指针节点LNode * pre = L;//指向头节点LNode * p = L->next;//指向头节点的下一个节点LNode * q;//操作节点while(p != NULL){if(p->data == X){//进行删除操作q = p;p = p->next;//转移指针空间pre->next = p;//保证pre链表的连续性free(q);//释放单独的q指针删除节点的空间}else{//没有找到x,继续往下找pre = p;p = p->next;}}
}

题目02

在长度为n的顺序表L中,编写一个时间复杂度为0(n),空间复杂度为O(1)的算法,该算法删除所有值为X的数据元素

题目分析

  1. 时间复杂度为0(n)代表着只能扫描一趟顺序表数组
  2. 空间复杂度为0(1)代表着只能开辟常量级个数组空间,也就是不能在申请一个数组。
  3. 找到需要查找的数据X
  4. 删除相关位置的元素,并向前移动进行操作。

算法思路

  1. 算法实现的思想包括进行查找和删除(这里是指移动元素的操作)
  2. 设置一个记录数k
  3. 每次当顺序表的数据进行匹配X成功时,k便+1
  4. 若当前的匹配位置不是X,那么将会对其进行元素进行前移覆盖的方式进行元素的删除操作(移动i-k个单位)。

核心代码如下:

        int j = 0;for(int i = 0;i<nums.length;i++){if(nums[i] != val){nums[i-j] = nums[i];}else{j++;}}

其完整回答代码如下:

/**在长度为n的顺序表L中,*编写一个时间复杂度为0(n),空间复杂度为O(1)的算法,*该算法删除所有值为X的数据元素**/
//必须添加&符号,因为要对顺序表进行删除
class Solution {public int removeElement(int[] nums, int val) {if (nums == null || nums.length == 0){return 0;}int j = 0;for(int i = 0;i<nums.length;i++){if(nums[i] != val){nums[i-j] = nums[i];}else{j++;}}return nums.length - j;}
}

题目03

设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为0(1)。

题目分析:
1、要求的空间复杂度为0(1)代表只能申请常量的存储空间

算法图解思路

实现思路:

  1. 需要对第一个元素与第n个元素进行交换,然后对其进行依次比较进行交换
  2. 采用常规循环和递归进行实现。

1、实现代码常规方式

/**设计一个高效算法,*将顺序表L的所有元素逆置,*要求算法的空间复杂度为0(1)*/
//采用常规的循环方式实现
void Reverse(SqlList &L){ElemType tem;//定义一个临时的存储变量//for (int i = 0; i < L.length/2; i++){temp = L.data[i];L.data[i] = L.data[L.length-i-1];L.data[L.length-i-1] = temp;}
}

2、实现代码递归方式

/**设计一个高效算法,*将顺序表L的所有元素逆置,*要求算法的空间复杂度为0(1)*/
//采用递归方式实现
void ReverseByRecursion(int * A,int low ,int high){if(low < high){swap(A.low,A.high);ReverseByRecursion(A,low+1,high-1);}
}
//交换函数
void swap(int a ,int b){int temp = a;a = b;b = temp;
}

题目04

将两个有序顺序表合并为一个新的有序表,并返回结果顺序表

算法编写思路分析:

思路:

  1. 定义三个指针i指向A,j指向B的第一个元素,k指向C的第一个元素。
  2. 如果A的i的数据域小于B的数据域那么添加到C的第一个元素

其完全代码如下:

/*** 将两个有序顺序表合并为一个新的有序表,* 并返回结果顺序表为布尔类型*///采用bool文件进行设计//因为要对C顺序表进行添加操作,需要添加&符号
bool Merge(Sqlist A,Sqlist B, Sqlist &C){//进行比较if(A.length + B.length > C.MAXSIZE){return false;}int i = 0;int j = 0;int k = 0;//设置循环条件while(i<A.length && j<B.length){if(A.data[i] < B.data[j]){//如果A位置的数据比B位置的小,先放入CC.data[k] = A.data[i];i++;k++;}else{//这里若A的数据与B的数据相等,不管执行哪个if判断条件都满足题意C.data[k] = B.data[j];j++;k++;}}//这里对A的长度或者B的长度达到最后进行处理while(i<A.length){//a有剩余元素C.data[k] = A.data[i];k++;i++;}//B处理while(j<B.length){C.data[k] = B.data[j];j++;k++;}return true;
}

计算机考研数据结构代码题总结--Day01相关推荐

  1. 【计算机考研数据结构代码题总结】链表

    1.在带头节点的单链表L中,删除所有值为X的结点,并释放其空间,假设值为X的节点不唯一,试编写算法实现. //单链表 //要放置三个指针,pre指向头结点(p结点的前驱),p指向头结点的下一个结点,q ...

  2. 【计算机考研数据结构代码题总结】栈和队列

    1.回文是指正读反读均相同的字符序列,如" "abba" " 和" "abdba" " 均是回文,但" &qu ...

  3. 【23考研】计算机408数据结构代码题强化阶段划重点(王道书)

    视频链接:[23考研]10分钟带你整理408数据结构强化阶段代码题复习重点 本篇只适合考408的同学,请自主命题的同学自觉右上角×掉 因为王道书为了照顾自主命题的同学,所以很多算法也给出了代码实现,实 ...

  4. 计算机考研数据结构真题答案,数据结构考研真题和答案

    <数据结构考研真题和答案>由会员分享,可在线阅读,更多相关<数据结构考研真题和答案(14页珍藏版)>请在人人文库网上搜索. 1.一.选择题1. 算法的计算量的大小称为计算的( ...

  5. 贼全面的计算机考研数据结构算法题集合(408+自命题均可)

    文章目录 Code 数组 合并排序的数组 约瑟夫环问题--高效解法 栈 栈实现队列 最小栈 逆波兰表达式求值 队列 设计循环队列 链表 删除链表节点 删除链表中间节点 删除链表的倒数第n个节点 删除链 ...

  6. 大师兄手把手教你写考研数据结构代码题(50天代码整理合集)

    #include <stdio.h>#include <stdlib.h>//Day01 //在带头结点的单链表L中,删除所有值为x的结点,并释放其空间,假设值为x的结点不唯一 ...

  7. 计算机数据结构代码题----Day02

    计算机数据结构代码题----Day02 顺序表代码题 题目01 从顺序表中删除其数值在给定数值为s与t之间,包含(s和t),要求(s<t)的所有元素,如果s或t的顺序不合理或者顺序表为空,则显示 ...

  8. 计算机考研数据结构题库

    数据结构题库: 题目列表 - 计算机考研专业题库 研究数据结构就是研究__N诺计算机考研 [数据结构 P1000] 研究数据结构就是研究 A. 数据的逻辑结构     B. 数据的存储结构 C. 数据 ...

  9. 南京邮电大学计算机数据结构考研真题,南京邮电大学考研数据结构真题.pdf

    南京邮电大学考研数据结构真题 状元 南京邮电大学99-06 年硕士研究生入学考试数据结构试题 第 1 页 共 15 页 状元 南京邮电大学99-06 年硕士研究生入学考试数据结构试题 第 2 页 共 ...

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

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

最新文章

  1. linux ipod驱动程序,佳能 Apple iPod 驱动程序下载-更新佳能软件(USB)
  2. Cissp-【第8章 软件开发安全】-2021-3-15(822页-918页)【完】
  3. Windows环境下32位汇编程序设计C版code--第五章(三)
  4. bzoj 3512: DZY Loves Math IV【欧拉函数+莫比乌斯函数+杜教筛】
  5. vuex中store 的mutation
  6. 在ASP.NET AJAX中使用应用程序服务和本地化(4):示例程序:读取、修改并保存用户个性化信息...
  7. qt开发环境 - c++之无名名字空间,名字空间嵌套邻近原则(内藏外),名字空间别名
  8. androidsdk里的android.bat和uiautomatorview.bat启动就闪退问题
  9. selenium定位输入框_[Selenium 粗浅笔记] 用Selenium填写表单
  10. python要记多少个单词是合理的_词汇量少的人每天背多少单词合适?
  11. 一文了解sun.misc.Unsafe
  12. 用HTML5的DOCTYPE标签兼容各版本IE浏览器的方法技术
  13. 显示器尺寸对照表_电脑液晶屏尺寸如何计算,液晶屏尺寸对照表
  14. NXP智能车竞赛笔记(室外电磁组)
  15. 基于android校园新闻APP开发的设计与实现
  16. JUC学习 - 原子操作增强类LongAdder、LongAccumulator
  17. 为大家准备一份数据分析师简历的清单
  18. 【论文阅读】3D-CVF: Generating Joint Camera and LiDAR Features Using Cross-View Spatial Feature Fusion for
  19. Evil Corp 团伙开始使用 LockBit Ransomware 逃避制裁
  20. 用tkinter做一个代码编辑器(语法高亮,直接运行)

热门文章

  1. xenu死链检测工具使用教程
  2. 遗传算法 matlab 详解,遗传算法的Matlab实现讲解
  3. linux 下载hbase源码,linux上安装hbase(示例代码)
  4. 办公技巧:分享100个Excel快捷键,值得收藏!
  5. HTML如何实现简单登录页面
  6. 有关笔记本电脑安装触控板驱动程序,对触控板进行相应的设置步骤
  7. Echarts教程篇:概览
  8. 苹果和亚马逊因疑似侵犯云端同步功能专利而被提起美国337调查
  9. iOS 无线打印功能(AirPrint)
  10. c语言从入门到放弃之冒泡排序