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

原创 2006年06月21日 11:24:00

// 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;
}

单链表数据中含有数字字符、字母字符、其他字符三种 。 构造3个循环链 ,使得循环链只有一种字符 。但必须要使用原来单链的结点空间作为三个表的结点空间

程序功能: //      单链表数据中含有数字字符、字母字符、其他字符三种 //      构造3个循环链 ,使得循环链只有一种字符 //      但必须要使用原来单链的结点空间作为三个表的结点空...
  • l631068264
  • l631068264
  • 2013年10月17日 17:23
  • 1450

二叉树之二叉链表的类模板实现

该类模板实现了一个二叉树的模板类,采用二叉链表实现。 定义二叉树节点类,采用二叉链表实现。 [cpp] view plaincopyprint? ...
  • han____shuai
  • han____shuai
  • 2015年08月13日 00:45
  • 1205

附带文件操作的通讯录,可以实现链表到文件的写入以及文件到链表的读取

#include #include #include #include #define MAXSIZE 10 typedef struct NODE {     char nam...
  • wwwww_bw
  • wwwww_bw
  • 2016年12月11日 23:32
  • 817

CPP 链表实现队列

链表实现队列 一、链表头文件listcpp.h #ifndef LISTCPP_H #define LISTCPP_H #include #include #include #include ...
  • kuenking111
  • kuenking111
  • 2015年05月05日 23:12
  • 294

CPP链表实现栈

一:链表的方法文件集:list.h #ifndef LIST_H #define LIST_H #include #include #include #include #include us...
  • kuenking111
  • kuenking111
  • 2015年05月05日 22:48
  • 568

C++实现链表逆序

链表的结构
  • a1037488611
  • a1037488611
  • 2014年10月20日 14:34
  • 1372

C++ 在.h文件中声明,在.cpp文件中定义 模板函数和模板类

C++ 需要模板函数的定义和声明要放在一起,这样才能根据调用需要选择编译具体的实例。如果我们需要多种实例,每个实例要编译一次,就需要编译多次。在模板函数实现妥当以后,当我们在其它文件中使用某些模板函数...
  • bendanban
  • bendanban
  • 2016年05月05日 12:39
  • 3160

C和CPP注释转换

注释转换是将如下几种情况的注释分别按情况转换为相应注释风格(将C注释转换为C++注释风格)首先我们需要两个文件来分别存储需要修改的源码和修改之后的代码,这里我将文件创建在当前目录之下注释转换的实现依据...
  • centor
  • centor
  • 2017年06月03日 14:34
  • 516

文件实现通讯录修改版

头文件 #define _CRT_SECURE_NO_WARNINGS 1 #ifndef __CONTACT_H__ #define __CONTACT_H__ #include #incl...
  • shangguan_1234
  • shangguan_1234
  • 2016年06月03日 00:39
  • 143

双链表以及循环链表的基本操作

首先先看双链表以及循环链表的结构图 看完了之后,差别在哪很明显了吧。下面直接上双链表的代码 // DoubleList.cpp : 定义控制台应用程序的入口点。 // #...
  • u011922261
  • u011922261
  • 2015年04月27日 18:59
  • 741
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言链表的实现(修改版)Cpp文件
举报原因:
原因补充:

(最多只允许输入30个字)