【数据结构作业—02】双链表

2.实现下述要求的Locate运算的函数

问题描述

设有一个带表头结点的双向链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次Locate (L, x)操作时,令元素值为x的结点的访问频度freq1,并将该结点前移,链接到与它的访问频度相等的结点后面(如果该结点没有找到与它访问频度相等的结点,链接到表头后面结点),使得链表中所有结点,保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。

 

解决方案要求

输入参数:

  1. 输入nn表示双向链表L的长度,L中的结点的data域依次为1n
  2. 随机多次调用Locate函数,输入x(调用函数次数由用户决定)。

输出参数:

调用Locate函数结束后,从头结点开始依次输出链表L中个结点的内容(data+freq

参考样例:

 

 

代码:

  1 #include "stdlib.h"
  2 #include <iostream>
  3 using namespace std;
  4 
  5 typedef int ListData;
  6 typedef struct DoubleNode {
  7     ListData data, frequency;
  8     struct DoubleNode *prior, *next;
  9 }DoubleNode, *DoubleList;
 10 
 11 void CreateDoubleList (DoubleList &first) {
 12     first = (DoubleNode*)malloc(sizeof(DoubleNode));
 13     if(first == NULL)    {
 14         cout << "存储分配错误!" << endl;
 15         exit(1);
 16     }
 17     first->prior = first->next = first;
 18 }
 19 
 20 void IniteList(DoubleList &first, ListData n)    {
 21     DoubleNode *carrier, *temp = first;
 22     for (int i = 0; i < n; i++)    {
 23         carrier = (DoubleNode*)malloc(sizeof(DoubleNode));
 24         carrier->data = i + 1;
 25         carrier->frequency = 0;
 26         //Insert
 27         carrier->prior = temp;
 28         temp->next = carrier;
 29         carrier->next = first;
 30         carrier->next->prior = carrier;
 31         
 32         temp = carrier;
 33     }
 34 }
 35 
 36 DoubleList Locate(DoubleList &first, ListData x, ListData n)    {
 37     DoubleNode *temp = first->next;
 38     while(temp->data != x && temp != first)    {
 39         temp = temp->next;
 40     }
 41     if (temp == first)    {
 42         cout << "Please input number range from " << 1 << " to " << n << endl;
 43         exit(1);
 44     }
 45     else
 46         return temp;
 47 }
 48 
 49 void SortList(DoubleList &first, ListData x, ListData n)    {
 50     DoubleNode *temp;
 51     temp = Locate(first, x, n);
 52     int tempNumber;
 53     temp->frequency++;
 54     if (temp->prior != first)    {
 55         while (temp->frequency > temp->prior->frequency)    {
 56             //SWAP 
 57             tempNumber = temp->prior->data;
 58             temp->prior->data = temp->data;
 59             temp->data = tempNumber;
 60             //cout << "temp->prior->data " << temp->prior->data << endl;
 61             //cout << "temp->data " << temp->data << endl;
 62             
 63             tempNumber = temp->prior->frequency;
 64             temp->prior->frequency = temp->frequency;
 65             temp->frequency = tempNumber;
 66             //cout << "temp->prior->frequency " << temp->prior->frequency << endl;
 67             //cout << "temp->frequency " << temp->frequency << endl;
 68         }
 69     }    
 70 }
 71 
 72 int main()    {
 73     int n;
 74     cout << "Please input the link list length:" << endl;
 75     cin >> n;
 76     
 77     cout << "The link list data are" << endl;
 78     for (int i = 0; i < n; i++)    
 79         cout << "The   " << i + 1 << " node is   " << i + 1 << ", its frequency is 0." << endl;
 80     
 81     cout << "Let's start to test Locate Function.(-1 meansstopping input number)" << endl;
 82     
 83     DoubleList first;
 84     CreateDoubleList(first);
 85     IniteList(first, n);
 86     
 87     int x = 0;
 88     while(1)    {
 89         cout << "Please input number :";
 90         cin >> x;
 91         if (x != -1) {
 92             SortList(first, x, n);
 93         } 
 94         else    break;
 95         
 96         
 97     }
 98     cout << "After test, the link list data are:" << endl;
 99     DoubleNode *temp = first->next;
100     int count = 0;
101     while(temp != first)    {
102         count++;
103         cout << "The   " << count << " node is   " << temp->data 
104             << ", its frequency is " << temp->frequency << "." << endl;
105         temp = temp->next;
106     }
107     
108     return 0;
109 }

 

转载于:https://www.cnblogs.com/QingHuan/p/4947787.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第9章 接口

1、抽象类&#xff1a; 包含抽象方法的类叫抽象类&#xff0c;如果一个类包含一个或多个抽象方法(abstract void f();)&#xff0c;该类必须被限定为抽象的&#xff0c;否则编译出错。 1、抽象类不能被实例化&#xff0c;实例化的工作应该交由它的子类来完成&#xff0c;它只需…

用node-webkit(NW.js)创建桌面程序

以往写windows桌面程序需要用MFC、C#之类的技术&#xff0c;那么如果你只会web开发技术呢&#xff1f;或者说你有一个网站&#xff0c;但是你想把你的网站打包成一个桌面应用程序&#xff0c;该如何做呢&#xff1f; 答案就是用node-webkit这个开源框架&#xff0c;他封装了web…

kindeditor用法简单介绍(转)

1&#xff0c;首先去官网下载http://www.kindsoft.net/ 2&#xff0c;解压之后如图所示&#xff1a; 由于本人做的是用的是JSP&#xff0c;所以ASP,PHP什么的就用不上了&#xff0c;直接把那些去掉然后将整个文件夹扔进Myeclipse&#xff0c;如图&#xff1a; 里面有个报错&am…

SOLIDWORKS——参数化建模

https://www.sohu.com/a/259742200_100042821 知识点&#xff1a;投影曲线、曲面填充、扫描、外观设置 建模步骤 1.先在工具——方程式里输入一个直径的变量A120 。 2.在前视基准面上草绘圆&#xff0c;画一条直径。直径等于变量A。 3.旋转&#xff0c;选择粉色区域。 4.上视…

Androd安全——反编译技术完全解析

0&#xff0e;前言单纯从技术角度上来讲&#xff0c;掌握反编译功能确实是一项非常有用的技能。另外既然别人可以反编译程序&#xff0c;我们当然有理由应该对程序进行一定的保护&#xff0c;因此代码混淆也是我们必须要掌握的一项技术。看完此篇如果对代码混淆也感兴趣&#x…

python——shape 与reshape

转载自:https://blog.csdn.net/u010916338/article/details/84066369 shape()和reshape()都是数组array中的方法 numpy中reshape函数的三种常见相关用法 numpy.arange(n).reshape(a, b) 依次生成n个自然数&#xff0c;并且以a行b列的数组形式显示np.arange(16).reshape(2,…

误删了microsoft visual c++后如何正常运行matlab

误删了microsoft visual c后如何正常运行matlab 本人在卸载visual studio2013的时候&#xff0c;因为这个软件卸载的过程中出现一些问题&#xff0c;误将visual c当成VS的组件一同删除了。但是在打开matlab 时发现出错&#xff0c;matlab打开后会出现下面的界面。 出现这个问题…

iScreenLocker 3.1.8 安卓锁屏通知--苹果一样的体验

*软件介绍:苹果锁屏通知(iScreenLocker)是一款android上ios风格的锁屏软件。它颠覆安智通知设计&#xff0c;将原来状态栏的通知搬到锁屏界面上来&#xff0c;能够在桌面轻松收发短信,微博,微信等消息。它独有的消息唤醒功能。能使手机从待机界面唤醒而消耗非常少的电量。手指轻…

JSP慕课网阶段用户登录小例子(不用数据库)

getAttribute和setAttribute一起使用&#xff0c;而getParameter用于取得如request传来的参数。 Web是请求/响应架构的使用&#xff0c;而request和response就是在服务器端生成的相应的两个对象&#xff0c;request能够获取客户端传递的参数及相关的一些信息&#xff0c;而resp…

机器学习python——python基础

目录 1、常用库 2、shape与reshape&#xff0c;dtype 3、range、arange、linspace、logspace 4、数组的计算、切片 5、绘图基本设置 6.三维绘图 1、常用库 numpy、scipy、matplotlib、math 2、shape与reshape&#xff0c;dtype https://blog.csdn.net/qq_45769063/arti…

win10环境下如何给visual studio 2013永久配置opencv3.1.0环境

win10环境下如何给visual studio 2013永久配置opencv3.1.0环境 本人在给visual studio 2013配置opencv 环境下遇到过一些问题&#xff0c;比如配置不成功或者不能永久配置opencv环境。先将自己的配置经验分享于此&#xff0c;希望同道中的好友可以用上。 首先自行下载Visual s…

属性名、变量名与 内部关键字 重名 加

procedure TForm4.btn3Click(Sender: TObject); varMyQj: TQJson;MyPrinter: TPrinter; beginMyQj : TQJson.Create;tryMyPrinter.name : A号打印机;MyPrinter.status : enabled;MyPrinter.&type : yes;MyQj.FromRecord<TPrinter>(MyPrinter);Memo1.Lines.Add(MyQj.A…

机器学习——支持向量机SVM之线性模型

目录 一、没有免费的午餐定理 二、支持向量机SVM&#xff08;support vector machine&#xff09; 1、线性模型和非线性模型 2、如何在线性模型中画出一条直线&#xff08;优化过程——vplink&#xff09; 1&#xff09;多少条&#xff1f; 2&#xff09;如何画出最好的直…

Oauth2.0和1.0区别

1.0的授权分3步, A)客户端到授权服务器请求一个授权令牌(request token&secret) B)引导用户到授权服务器请求授权 C)用访问令牌到授权服务器换取访问令牌(access token&secret) D)用访问令牌去访问得到授权的资源 2.0的用户授权过程有2步&#xff0c; A)引导用户到授权…

spring@PropertySource用法

v测试例子 package com.hjzgg.auth.config;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annot…

机器学习——支持向量机SVM之非线性模型(低维到高维映射)

目录 一、非线性模型的最优化问题 1、非线性模型最优化模型 2、两个概念 1&#xff09;正则项&#xff08;regularization term&#xff09; 2&#xff09;调参参数 2、高维映射 1&#xff09;定义及作用 2&#xff09;高维映射后的最优化模型 3&#xff09;异或问题&…

html表单中get与post之间的区别

当用户在 HTML 表单 (HTML Form) 中输入信息并提交之后&#xff0c;有两种方法将信息从浏览器传送到 Web 服务器 (Web Server)。 一种方法是通过 URL&#xff0c;另外一种是在 HTTP Request 的 body 中。 前一种方法&#xff0c;我们使用 HTML Form 中的 method "get&quo…

世界坐标系,摄像机坐标系、图像坐标系关系汇总

**摄像机标定&#xff1a;**在计算机视觉研究领域&#xff0c;摄像机标定是一个重要的环节。摄像机标定就是求取摄像机内外参数的过程。 世界坐标系&#xff1a;绝对坐标系&#xff0c;一般的三维场景都由这个坐标系来表示。摄像机可以放置在环境中的任何位置&#xff0c;因此可…

SpringMVC-HelloWorld

2&#xff0e;5、Hello World入门 2.5.1、准备开发环境和运行环境&#xff1a; ☆开发工具&#xff1a;eclipse ☆运行环境&#xff1a;tomcat6.0.20 ☆工程&#xff1a;动态web工程&#xff08;springmvc-chapter2&#xff09; ☆spring框架下载&#xff1a; spring-framework…

机器学习——支持向量机SVM之非线性模型(原问题和对偶问题)

目录 一、原问题&#xff08;prime problem&#xff09; 二、原问题的对偶问题&#xff08;dual problem&#xff09; 1、定义一个辅助函数 2、定义对偶问题 >>>问题1&#xff1a;上面说到遍历w&#xff0c;那w的取值范围和取值步长是怎样的&#xff1f;即遍历的…