设有一个双向循环链表,每个结点中除有prior,data和 next 三个域外,还增设了一个访问频度域freq在链表被起用之前,频度域 freq的值均初始化为零,而每当对链表进行一次LOCATE (Lx)的操作后,被访问的结点(即元素值等于x的结点)中的频度域freq的值便增1,同时调整链表中结点之间的次序,使其按访问频cA度非递增的次序顺序排列,以便始终保持被频繁访问的结点总是靠近表头结点。试编写符合上述要求的 LOCATE操作的算法。在2.39至2.40题中,稀疏多项式采用的顺序存储结构SqPoly定义为typedcf struct {int coef;int exp;}PolyTerm;typedef struct {PolyTerm *data; /多项式的顺序存储结构int length;}SqPoly;
举一反三
- 稀疏多项式采用的循环链表存储结构LinkedPoly定义为typedef struct Po1yNode {PolyTerm data;struct Po1yNode *next ;} PolyNode, *PolyLink;typedef PolyLink LinkedPoly;试以循环链表作稀疏多项式的存储结构,编写求其导函数的方法,要求利用原多项式中的结点空间存放其导函数多项式,同时释放所有无用结点。
- 稀疏多项式采用的循环链表存储结构LinkedPoly定义为typedef struct Po1yNode {PolyTerm data;struct Po1yNode *next ;} PolyNode, *PolyLink;typedef PolyLink LinkedPoly;试编写算法,将-一个用循环链表表示的稀疏多项式分解成两个多项式,使这两个多项式中各自仅含奇次项或偶次项,并要求利用原链表中的结点空间构成这两个链表。
- 给定一个带头结点的单链表,设L为头指针,结点的结构定义如下,试写一算法在该链表中删除元素值为e的结点,假设链表中没有元素值重复的结点并且e一定存在。 typedef struct Lnode{ int data; struct Lnode *next; } Lnode,*LinkList; //单链表结构 void (LinkList &L,int e ) { //在该函数中补充代码 }
- 已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,写出算法change(p),交换p所指向的结点和它的前缀结点的顺序
- 设有一个双链表[tex=0.643x1.0]8+M7OwdUGZPUoOQAaQHP2A==[/tex],每个节点中除有[tex=4.643x1.214]0B3PMnawhJdRFiq4w5Iqkw==[/tex]和[tex=2.0x0.929]7QqODb1IqAMYMAFmGasRTA==[/tex] 三个域外,还有一个访问频度域[tex=1.857x1.214]ce/KC0kEtmScDFFi7nB/dw==[/tex],在链表被起用之前,其值均初始化为零。每当进行“[tex=7.643x1.357]UJ8jdj3tcRU+g4v4U6B4ODSbFGCJUgoFWpbri0CC2As=[/tex]”运算时,令元素值为[tex=0.571x0.786]c5VsltFnl9nO0qB/vNKOWA==[/tex]的节点中 [tex=1.857x1.214]ce/KC0kEtmScDFFi7nB/dw==[/tex]域的值加[tex=0.5x1.0]oYgVDn+QZqcDCRxqEZwM2A==[/tex],并调整表中节点的次序,使其按访问频度的递减顺序排列,以便使频繁访问的节点总是靠近表头。试写一符合上述要求的[tex=5.286x1.0]pr5MjwytoMllTEqI/Tv4gw==[/tex]运算的算法。