您的位置:首页 > 其它

循环链表的表示与实现

2015-09-06 09:03 316 查看
1.存储结构

typedef int Static;
typedef int ElemType;
struct LNode{
ElemType date;
struct LNode *next;
};
typedef struct LNode *LinkList;

2.创建一个空的循环链表

void InitList(LinkList &L)
{
L = (LinkList)malloc(sizeof(LNode));
if(!L)
exit(OVERFLOW);
L->next = L;
}

3.将链表设置为空表
void ClearList(LinkList &L)
{
LinkList p,q;
L = L->next;
p = L->next;
while(p!=L)
{
q = p->next;
free(p);
p = q;
}
}

4.销毁链表
void DestoryList(LinkList &L)
{
DestoryList(L);
free(L);
L->next = NULL;
}

5.判断表 L 是否为空

Static isEmpty(LinkList L)
{
if(L->next == L)
return FALSE;
else
return TURE;
}

6.求表 L 的长度
int getLength(LinkList L)
{
int len = 0;
LinkList p = L->next;
while(p!=L)
{
p = p->next;
len++;
}
}

7.取出第 i 个元素
ElemType getElem(LinkList L, int i,ElemType &e)
{
int count = 0;
LinkList p = L->next;
if(i<=0||i>getLength(L))
return ERROR;
while(count < i)
{
p = p->next;
count ++;
}
e = p->date;
return OK;
}

8.找出元素 e 在表中的位置
int getLocation(LinkList L,ElemType e)
{
LinkList p = L->next->next;
int count = 1;
while(p!=L->next)
{
if(p->date==e)
return count;
p = p->next;
count++;
}
return 0;
}

9.找出元素 e 在表中前一个元素
Static getPrior(LinkList L,ElemType e,ElemType &pre_e)
{
LinkList q,p = L->next->next;
q = p->next;
while(q!=L->next)
{
if(q->date==e)
{
pre_e = p->date;
return OK;
}
p = q;
q = q->next;
}
return ERROR;
}

10.找出元素 e 在表中后一个元素
Static getNext(LinkList L,ElemType e, ElemType &next_e)
{
LinkList p = L->next,q;
while(p->next!=L)
{
q = p->next;
if(p->date == e)
{
next_e = q->date;
return OK;
}
p = q;
q = q->next;
}
return ERROR;
}

11.在表中第 i 个位置插入元素 e
Static ListInsert(LinkList &L,int i,ElemType e)
{
LinkList q,p = L->next;
if(i<=0 || i>getLength(L)+1)
return ERROR;
int count=0;
while(count<i-1)
{
p = p->next;
count++;
}
q = (LinkList)malloc(sizeof(LNode));
q->date = e;
q->next = p->next;
p->next = q;
if(p==L)
L=q;
return OK;
}

12.在表中第 i 个位置删除元素 e
Static ListDelete(LinkList &L,int i,ElemType &e)
{
if(i<=0||i>getLength(L))
return ERROR;
LinkList q,p = L->next;
int count=0;
while(count<i-1)
{
p = p->next;
count++;
}
q = p->next;
e = q->date;
p->next = q->next;
if(q==L)
L=p;
free(q);
return OK;
}

13.打印表
void visitList(LinkList L)
{
LinkList p = L->next->next;
while(p!=L->next)
{
printf("%d\n",p->date);
p = p->next;
}
printf("\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: