双向指.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
双向指

线性表的双向链表存储结构   typedef struct DuLNode   {   ElemType data;   struct DuLNode *prior,*next;   }DuLNode,*DuLinkList;   带头结点的双向循环链表的基本操作   void InitList(DuLinkList *L)   { /* 产生空的双向循环链表L */   *L=(DuLinkList)malloc(sizeof(DuLNode));   if(*L)   (*L)-next=(*L)-prior=*L;   else   exit(OVERFLOW);   } 赋值   Status GetElem(DuLinkList L,int i,ElemType *e)   { /* 当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR */   int j=1; /* j为计数器 */   DuLinkList p=L-next; /* p指向第一个结点 */   while(p!=Lji)   {   p=p-next;   j++;   }   if(p==L||ji) /* 第i个元素不存在 */   return ERROR;   *e=p-data; /* 取第i个元素 */   return OK;   } 元素的插入   Status ListInsert(DuLinkList L,int i,ElemType e)   { /* 在带头结点的双链循环线性表L中第i个位置之前插入元素e,i的合法值为1≤i≤表长+1 */   /* 改进算法2.18,否则无法在第表长+1个结点之前插入元素 */   DuLinkList p,s;   if(i1||iListLength(L)+1) /* i值不合法 */   return ERROR;   p=GetElemP(L,i-1); /* 在L中确定第i个元素前驱的位置指针p */   if(!p) /* p=NULL,即第i个元素的前驱不存在(设头结点为第1个元素的前驱) */   return ERROR;   s=(DuLinkList)malloc(sizeof(DuLNode));   if(!s)   return OVERFLOW;   s-data=e;   s-prior=p; /* 在第i-1个元素之后插入 */   s-next=p-next;   p-next-prior=s;   p-next=s;   return OK;   } 元素的删除   Status ListDelete(DuLinkList L,int i,ElemType *e)   { /* 删除带头结点的双链循环线性表L的第i个元素,i的合法值为1≤i≤表长 */   DuLinkList p;   if(i1) /* i值不合法 */   return ERROR;   p=GetElemP(L,i); /* 在L中确定第i个元素的位置指针p */   if(!p) /* p=NULL,即第i个元素不存在 */   return ERROR;   *e=p-data;   p-prior-next=p-next;   p-next-prior=p-prior;   free(p);   return OK;   }   /*****************************************************   *文件名:LinkedList.h   *功能:实现双向链表的基本功能   *注意:为了使最终程序执行得更快,仅在Debug模式下检测操作合法性。   *另外不对内存分配失败作处理,因为一般情况下应用程序有近2GB真正可用的空间   *********************************************************/   #pragma once   #include assert.h   templateclass T   class LinkedList   {   private:   class Node   {   public:   T data; //数据域,不要求泛型T的实例类有无参构造函数   Node* prior; //指向前一个结点   Node* next; //指向下一个结点   Node(const T element,Node* pri,Node* nt):data(element),next(nt),prior(pri){}   Node():data(data){}//泛型T的实例类的复制构造函数将被调用.在Vc201

文档评论(0)

ybcm963 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档