知识大全 数据结构与算法线性表复习习题6[2]
Posted 指针
篇首语:不一定终身受雇,但一定终身学习。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构与算法线性表复习习题6[2]相关的知识,希望对你有一定的参考价值。
已知有一个单向循环链表 其每个结点中含三个域 pre data和next 其中data为数据域 next为指向后继结点的指针域 pre也为指针域 但它的值为空 试编写算法将此单向循环链表改为双向循环链表 即使pre成为指向前驱结点的指针域解
// 建立一个空的循环链表
Status InitList_DL(DuLinkList &L)
L=(DuLinkList)malloc(sizeof(DuLNode));
if(!L) exit(OVERFLOW);
L >pre=NULL;
L >next=L;
return OK;
// 向循环链表中插入一个结点
Status ListInsert_DL(DuLinkList &L ElemType e)
DuLinkList p;
p=(DuLinkList)malloc(sizeof(DuLNode));
if(!p) return ERROR;
p >data=e;
p >next=L >next;
L >next=p;
return OK;
// 将单循环链表改成双向链表
Status ListCirToDu(DuLinkList &L)
DuLinkList p q;
q=L;
p=L >next;
while(p!=L)
p >pre=q;
q=p;
p=p >next;
if(p==L) p >pre=q;
return OK;
已知由一个线性链表表示的线性表中含有三类字符的数据元素(如 字母字符 数字字符和其他字符) 试编写算法将该线性表分割为三个循环链表 其中每个循环链表表示的线性表中均只含一类字符
解
// 将单链表L划分成 个单循环链表
Status ListDivideInto CL(LinkList &L LinkList &s LinkList &s LinkList &s )
LinkList p q pt pt pt ;
p=L >next;
pt =s ;
pt =s ;
pt =s ;
while(p)
if(p >data>= && p >data<= )
q=p;
p=p >next;
q >next=pt >next;
pt >next=q;
pt =pt >next;
else
if((p >data>= A && p >data<= Z ) ||
(p >data>= a && p >data<= z ))
q=p;
p=p >next;
q >next=pt >next;
pt >next=q;
pt =pt >next;
else
q=p;
p=p >next;
q >next=pt >next;
pt >next=q;
pt =pt >next;
q=L;
free(q);
return OK;
在 题中 异或指针双向链表 类型XorLinkedList和指针异或函数XorP定义为
typedefstructXorNode
char data;
structXorNode *LRPtr;
XorNode *XorPointer;
typedestruct //无头结点的异或指针双向链表
XorPointerLeft Right;//分别指向链表的左侧和右端
XorLinkedList;
XorPointer XorP(XorPointer p XorPointer q);
// 指针异或函数XorP返回指针p和q的异或值
cha138/Article/program/sjjg/201311/23387相关参考