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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

图邻接链表c语言实现 graph_adj_link.cpp

graph_adj_link.cpp 文件#include #include #include using namespace std;#define Vertex_MAX 50 #define...

信息系统修改版 c语言 控制台版

用文件来存储用户储存的信息,整形的id,age和浮点型的salary 和字符串的名字 并且对id来进行查重操作。 缺点是 文件的查重操作必须是上一次保存后信息存储文件有数据后才可以进行。 保存文件...

C语言实现链表的头插,尾插,插入,修改,删除和遍历

#include "stdio.h" #include "stdlib.h" #define N sizeof(struct node) //链表结构体 typedef struct ...

单链表的插入(完整版程序c语言实现,以字符串为数据)

这里的插入主要是针对有序表中插入一个数据,插入后仍然为一个有序表。接下来会给出在链表尾插入,和在链表投插入怎么做#include #include #include #include #define ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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