1 / 9
文档名称:

双向指针.doc

格式:doc   页数:9页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

双向指针.doc

上传人:endfrs 2016/6/3 文件大小:0 KB

下载得到文件列表

双向指针.doc

相关文档

文档介绍

文档介绍:线性表的双向链表存储结构 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!=L&&j<i) { p=p->next; j++; } if(p==L||j>i) /*第i 个元素不存在*/ return ERROR; *e=p->data; /* 取第 i 个元素*/ return OK; } 元素的插入 Status ListInsert(DuLinkList L,int i,ElemType e) { /* 在带头结点的双链循环线性表 L 中第 i 个位置之前插入元素 e,i 的合法值为 1≤i≤表长+1 */ /* 改进算法 ,否则无法在第表长+1 个结点之前插入元素*/ DuLinkList p,s; if(i<1||i>ListLength(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(i<1) /*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; } /***************************************