知识大全 数据结构与算法线性表复习习题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

相关参考