设立尾指针的单循环链表的表示和实现

设有尾指针的单循环链表的12个基本操作

void InitList(LinkList &L){L = (LinkList)malloc(sizeof(LNode));//产生头结点,并使L指向此头结点if (!L)exit(OVERFLOW);L->next = L;//头结点的指针域指向头结点}void ClearList(LinkList &L){LinkList p, q;L = L->next;//L指向头结点p = L->next;//p指向第一个结点while (p != L){//未到表尾q = p->next;//q指向p的后继结点free(p);//释放p所指结点p = q;//p指向q所指结点}L->next = L;//头结点指针域指向自身(头结点)}void DestroyList(LinkList &L){ClearList(L);free(L);L = NULL;}Status ListEmpty(LinkList L){if (L->next == L)return TRUE;;}int ListLength(LinkList L){LinkList p = L->next;//p指向头结点int i = 0;while (p != L)//未到表尾{i++;//计数器+1p = p->next;//p指向下一个结点}return i;}Status GetElem(LinkList L, int i, ElemType &e){int j = 1;//初始化,,j为计数器,初值为1LinkList p i > ListLength)return ERROR;//第i个元素不存在while (j < i)//顺时针向后查找,直到p指向第i个元素{j++;//计数器+1p = p->next;//p指向下一个结点}e OK;}int LocateElem(LinkList L, ElemType e, Status(*compare)(ElemType, ElemType)){int i = 0;//计数器初值为0LinkList p = L->next->next;//p指向第1个结点while (p!=L->next)//p未指向头结点{i++;i;//返回其位序p = p->next;//p指向下一个结点}return 0;//满足关系的数据元素不存在}Status PriorElem(LinkList L, ElemType cur_e, ElemType &pre_e){LinkList q, p = L->next->next;//p指向第1个结点q (qcur_e){//p的后继为cur_epre_e OK;}p = q;//p的后继不为cur_e,p向后移q = q->next;//q指向p的后继}return ERROR;}Status NextElem(LinkList L, ElemType cur_e, ElemType &next_e){LinkList p (pcur_e){//p所指结点的值为cur_enext_e OK;}p = p->next;//p指向下一个结点}return ERROR;}Status ListInsert(LinkList L, int i, ElemType e){int j = 0;LinkList s, p i > ListLength(L) + 1) return ERROR;while (j < i – 1)//寻找第i-1个结点{j++;p = p->next;//p指向下一个结点}s = (LinkList)malloc(sizeof(LNode));//生成新结点,以下将其插入L中se;s->next = p->next;//新结点指向原第i个结点p->next = s;//原第i-1个结点指向新结点if (p == L)//插在表尾L = s;//L指向新的尾结点return OK;}Status ListDelete(LinkList L, int i, ElemType &e){int j = 0;LinkList q, p i )//寻找第i-1个结点{j++;p = p->next;//p指向下一个结点}q = p->next;//q指向待删除结点,p的后继p->next = q->next;//待删除结点的前驱指向待删结点的后继e (L == q)//删除的是表尾元素L = p;//L指向新的表尾元素free(q);//释放待删除结点return OK;}void ListTraverse(LinkList L, void(*visit)(ElemType&)){LinkList p = L->next->next;//p指向首元结点while (p != L->next)//p不指向头结点{visit(p->data);p = p->next;}printf(“\n”);}

可是我要如何在浅薄的纸上为你画上我所有的命轮?

设立尾指针的单循环链表的表示和实现

相关文章:

你感兴趣的文章:

标签云: