前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构 | 每日一练(27)

数据结构 | 每日一练(27)

作者头像
小林C语言
发布2019-06-10 22:29:50
2810
发布2019-06-10 22:29:50
举报
文章被收录于专栏:C语言入门到精通

数据结构

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下

——老子

1

每日一练

1.下面函数的功能是在一个按访问频度不增有序的,带头结点的双向链环上检索关键值为 x 的结点,对该结点访问频度计数,并维护该链环有序。若未找到,则插入该结点。所有结点的频度域初值在建表时都为零。请将程序中四处空缺补写完整。

TYPE

link=^node

node=RECORD

key:char; freq:integer; pre,next:link;

END;

VAR l:link;

FUNCTION loc(l:link;x:char):link;

VAR p,q:link;

BEGIN

p:=l^.next; (1)_;

WHILE p^.key<>x DO p:=p^.next;

IF p=l THEN [ new(q); q^.key:=x; q^.freq:=0 ]

ELSE {找到}

[ p^.freq:=p^.freq+1; q:=p; (2)______;

WHILE q^.freq>p^.pre^.freq DO p:=p^.pre;

IF p<>q THEN [ (3)______ ]

IF (4)_ THEN [q^.next:=p, q^.pre;=p^.pre; p^.pre^.next:=q; p^.pre:=q]

return(q);

END;

正确答案

1.

(1) l^.key:=x;∥头结点l这时起监视哨作用

(2) l^.freq:=p^.freq ∥头结点起监视哨作用

(3) q->pre->next=q->next; q->next->pre=q->pre; ∥先将q结点从链表上摘下

q^.next:=p; q^.pre:=p^.pre; p^.pre->next:=q; p^.pre:=q; ∥结点q插入结点p前

(4) q^.freq=0 ∥链表中无值为x的结点,将新建结点插入到链表最后(头结点前)。

如果您觉得本篇文章对您有作用,请转发给更多的人,点一下好看就是对小编的最大支持!

-end-

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档