循环链表的表示与实现
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");
}
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");
}
相关文章推荐
- 使用Sass减少重复性代码
- 初探百度F.I.S — 由工具到解决方案
- 正则表达式入门
- html的块级元素和内联元素
- k短路
- javascript基础总结
- Java反射机制剖析(二)-功能以及举例
- sed 简明教程
- asp.net中bin目录下的 dll.refresh文件
- Mac SVN 命令行
- python中__name__=='__main__'的作用
- Windows多线程问题
- 初遇Sheffield遗传算法工具箱
- 使用了未经检查或不安全的操作
- AWK 简明教程
- Windows 多进程通信API总结
- android学习笔记之Eclipse中引入另一项目作为library
- poj3255基础次短路
- 文件夹下面的图片压缩上传服务器-----之代码封装
- Properties(配置文件类)