您的位置:首页 > 编程语言 > C语言/C++

C语言链表的实现(修改版)Cpp文件

2006-06-21 11:24 567 查看
// LinkList.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "LinkList.h"
#include <malloc.h>

int _tmain(int argc, _TCHAR* argv[])
{
LinkList list;
InitList(list);
printf("初始化链表长度:%d/n",list.len);

for(int i = 0 ;i < 3; i++)
{
Link link;
ElemType e;
e.Element = i+10;
MakeNode(link,e);
printf("节点数据域:%d/n",link->data.Element);

InsFirst(list,link);
printf("添加节点后链表长度:%d/n",list.len);
}

/*DelFirst(list,link);
printf("删除节点后链表长度:%d/n",list.len);*/

Link p;
Status x = LocatePos(list,p,2);
printf("可否定位到第%d个节点:%d/n",2,x);
free(p);

ElemType e;
e.Element = 11;
p = LocateElem(list,e);
printf("是否包含元素E:%d/n",p->data);

x = IsEmpty(list);
printf("删除节点后链表是否为空:%d/n",x);

x = ListTraverse(list);
printf("遍历链表成功:%d/n",x);
return 0;
}

//分配一个p指向的值为e的节点,并返回OK;如果分配失败,则error
Status MakeNode( Link &p, ElemType e){
p = ( Link)malloc(sizeof(LNode));
if( !p) return ERROR;
p->data = e;
p->next = NULL;
return OK;
}//The end of MakeNode

//释放p指向的节点
Status FreeLNode( Link &p){
if( !p) return ERROR;//Space does not exist
free( &p);
return OK;
}//end of FreeLNode

//初始化一个已经声明链表L
Status InitList( LinkList &L){
L.head = L.tail = NULL;
L.len = 0;
return OK;
}

//在头节点位置插入一个新的节点,h指向头,s指向新的节点
Status InsFirst( LinkList &L, Link s){
if(!s)
return ERROR;
s->next = L.head;
L.head = s;
L.len += 1;
return OK;
}

//将头节点删除
Status DelFirst( LinkList &h, Link &q){
if(!h.head)
return ERROR;
q = h.head;
h.head = q->next;
free(q);
h.len -= 1;
return OK;
}

//判断当前链表是否空表,以true和false返回结果
Status IsEmpty( LinkList L){
if(L.len == 0)
return OK;
else
return ERROR;
}

//返回链表当中头节点的位置
Position GetHead( LinkList L){
return L.head;
}

//返回链表当中最后一个节点的位置
Position GetLast( LinkList L){
return L.tail;
}

//由当前p指向的位置,查找p的邻接前一个节点的位置
Position PriorPos( LinkList L, Link p){
Link q ;
q = L.head;
while(q->next != p){
q = q->next;
}
return q;
}

//由当前p指向的位置,查找p的下一个邻接元素的位置
Position NextPos( LinkList L, Link p){
return p->next;
}

//获取当前链表内第i个元素的位置,如果i不存在,则ERROR
Status LocatePos( LinkList L, Link &p, int i){
if(!L.head)
return ERROR;
p = L.head;
for(int j = 0; j < i;j ++ )
{
p = p->next;
if(!p)
return ERROR;
}
return OK;
}
//查找当前链表当中与给定内容e相符的第一个元素的位置,找不到则返回Error
Position LocateElem( LinkList L, ElemType e){
if(!L.head)
return NULL;
Link p = L.head ;
while(p){
if(p->data.Element == e.Element)
return p;
p = p->next;
}
return p;
}
//遍历整个链表,如果遍历失败,则返回falsh
Status ListTraverse( LinkList L){
Link p = L.head;
for(int i = 0;i < L.len; i++){
p = p->next;
if(!p && i != L.len-1)
return ERROR;
}
return OK;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: