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;
}
//
#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;
}
相关文章推荐
- 链表实现文件C语言
- 二叉搜索树挂链表实现文件C语言
- K个有序链表共N个结点在O(NlgK)时间合并为一个新的有序链表实现文件C语言
- c语言将数据写入文件(用链表实现)
- C语言实现链表之双向链表(一)头文件
- C语言单项链表的实现
- linux下c语言实现tail -f功能---实时读取变化文件中的增量内容
- 用c语言实现一个文件切割器
- C语言实现 单向链表
- C语言实现链表节点的插入和删除
- 用c语言链表实现通讯录
- d-堆实现文件C语言
- 在.h文件中写声明,在.cpp文件中写变量和函数,以及实现类的函数
- 单链表及其基本操作(C语言实现)
- 图邻接矩阵的c语言实现 graph_adj_matrix.cpp
- C语言双链表,可实现增删改查功能,还可以将链表反转。
- C语言实现文件复制
- C语言实现单链表-04版
- c语言实现--单向循环链表操作
- VC6不支持模板函数在cpp文件中的实现