当前位置: 首页 > news >正文

【2015年数据结构真题】

用单链表保存m个整数,结点的结构为 [data] [link],且|data|<=n(n为正整数)。现要求设计一个时问复杂度尽可能高效的算法,对于链表中 data 的绝对值相等的结点,仅保留第一次出现的结点而删除其余绝对值相等的结点。例如, 若给定的单链表 head 如下:则删除结点后的 head 为

image.png

  1. 给出算法的基本设计思想。
  2. 使用采用C或C++语言描述算法, 给出单链表结点的数据类型定义。
  3. 根据设计思想, 采用C或C++语言描述算法,关键之处给出注释。
  4. 说明你所设计算法的时间复杂度和空间算杂度。

方法一:暴力求解

定义两个指针,p指向21,q指向-15,p每走一步,q就走剩下所有元素并比较,相等就删除

时间:O(m²) 空间:O(1)

typedef struct Node
{int data;          //该节点权值struct Node *link; //下一个节点
} Node;void ans(Node *HEAD)
{Node *p = HEAD->link; //外层遍历节点pNode *q, *r; //q是r的前一个节点while (p != NULL){q = p;if (abs(r->data) == abs(p->data)) //r表示待比较节点{q->link = r->link;free(r);}else   //不相同时才修改qq = q->link;}p = p->link;
}

方法二

算法的基本思想:

算法的核心思想是用空间换时间。使用辅助数组记录链表中已出现的
数值,从而只需对链表进行一趟扫描。
因为|data|≤n,故辅助数组 temp 的大小至少为 n+1,各元素的初值均
0。依次扫描链表中的各结点,同时检查 temp[|data|]的值,如果为 0,则
保留该结点,并令++temp[|data|];否则,将该结点从链表中删除。

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>typedef struct ListNode
{int data;          //该节点权值struct Node *pNext; //下一个节点
} Node,*PNODE;//筛选链表中绝对值重复的元素
void FiltrateRep(PNODE L,int len)
{int temp[len];memset(temp,0,sizeof(int)*len);//初始化位0PNODE pre,p;pre=L;while(pre->pNext!=NULL){p=pre->pNext;if(p!=NULL){if(temp[abs(p->data)]<1){++temp[abs(p->data)];//辅助数组对应元素位置+1pre=p;}else{//如果temp[p->data]大于1,正在判断的元素,是重复的元素,需要删除pre->pNext=p->pNext;free(p);}}}
}
http://www.lryc.cn/news/230816.html

相关文章:

  • vxe表格行拖拽
  • Linux之基本指令操作
  • 海康设备、LiveNVR等通过GB35114国密协议对接到LiveGBS GB28181/GB35114平台的详细操作说明
  • BUUCTF 面具下的flag 1
  • ArcGIS实现矢量区域内所有要素的统计计算
  • 3.4-初识Container
  • 壹基金爱泽瑞金 安全家园物料配送忙
  • arcgis--二维建筑面的三维显示设置
  • Maven 插件统一修改聚合工程项目版本号
  • 主从复制和读写分离
  • Redis模块的高级使用方式
  • Failed to restart network.service: Unit network.service not found.
  • wiki.js一个开源知识库系统
  • 关于Java抽象类和接口的总结和一点个人的看法
  • vue中ref的用法
  • 【华为OD题库-012】模拟消息队列-Java
  • Android修行手册 - 阴影效果的几种实现以及一些特别注意点
  • 【星海出品】SDN neutron (五) openvswitch
  • springboot整合vue2实现简单的新增删除,整合ECharts实现图表渲染
  • <蓝桥杯软件赛>零基础备赛20周--第5周--杂题-2
  • 数据结构哈希表(散列)Hash,手写实现(图文推导)
  • 【嵌入式设计】Main Memory:SPM 便签存储器 | 缓存锁定 | 读取 DRAM 内存 | DREM 猝发(Brust)
  • dameng数据库数据id decimal类型,精度丢失
  • python图神经网络,注意力机制、Transformer模型、目标检测算法、强化学习等
  • 安装包 amd,amd64, arm,arm64 都有什么区别
  • Ansible 企业实战详解
  • 云贝教育 |【技术文章】pg缓存插件介绍
  • Kohana框架的安装及部署
  • 无重复字符的最长子串 Golang leecode_3
  • Vue项目的学习一