[List]C语言实现链表

原创 2015年07月11日 00:18:25
   问题描述:数据结构中了解过链表,由一连串结点组成,有单向链表和双向链表之分。以下为单向链表一些知识的学习。
   链表结点:单向链表每个节点包含一个节点数据项,一个指向下一节点的指针。最后一个节点因为没有下一个节点了,其指针为空指针,
struct node {
    int value;
    struct node *next;
};
struct node *first = NULL;  // 初始化链表空
   由于这里结构内有一个指向相同结构类型的指针成员,因此不能使用typedef的结构声明方式。
   创建节点:首先要为节点分配内存单元,然后把数据存储到结点,最后把结点插入到链表。
struct node *new_node;
new_node = malloc(sizeof(struct node));  //为节点分配内存空间
   由于new_node是一个指向结构的指针,对其赋值可以用间接寻址*,然后再用.操作符获取其中变量,另外也可以用->操作符直接操作,
(*new_node).value = 100;
或者
new_node->value = 100;
    在链表头插入结点,
next_node->next = first;
first = new_node;
   此时first为链表头,即第一个节点,其next指针指向节点自身。
   搜索链表:for语句是首选,搜索链表惯用法:
for(p = first; p!=NULL; p = p->next)
……
   删除结点:首先要定位要删除的结点,接着改变前一个结点,让其绕过删除结点,最后需调用free函数回收内存,
struct node *delete_from_list(struct node *list, int n){
    struct node *cur,*prev;
   for(cur=list,prev=NULL;cur!=NULL&&cur->value!=n;prev=cur,cur=cur->next)
       ;
    if(cur==NULL)   // 未找到元素
       return list;
    if(prev==NULL)  // 元素在第一个结点
       return list = list->next;
    else
       prev->next =cur->next;
    free(cur);
    return list;
}
   有序链表:即链表中结点有序,按照结点中数据进行排序的。虽然有序链表的插入要麻烦一点,但是搜索会更快,不需要从头到尾的遍历。
版权声明:本文为博主原创文章,未经博主允许不得转载。

C语言List使用样例

#include #include #include #include using namespace std; //创建一个list容器的实例LISTCHAR typedef...
  • yinxing2008
  • yinxing2008
  • 2012年12月08日 20:30
  • 3294

C语言Array_List简单实现

C语言Array_List简单实现,对集合的增删改查,不做线程控制 Array_List.h /***************************************************...
  • lengyue2015
  • lengyue2015
  • 2017年09月12日 20:58
  • 313

C语言实现一个简单的单向链表list

C语言实现一个简单的单向链表listcheungmine用C语言实现一个简单实用的单向链表list,具有一定的实际意义。尤其我们不想使用STL里面的list类的时候。我实现的这个list,结点存储任何...
  • cheungmine
  • cheungmine
  • 2007年11月20日 10:44
  • 13619

C语言实现List的数据结构(很详细的注释)

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • baidu_19473529
  • baidu_19473529
  • 2017年06月27日 22:39
  • 1013

C语言实现的list -- 源码摘自wine

#ifndef __WINE_SERVER_LIST_H #define __WINE_SERVER_LIST_H #include struct list { struct list ...
  • hyhnoproblem
  • hyhnoproblem
  • 2015年01月13日 14:12
  • 6058

c语言list嵌套遍历

list::iterator itor;  //定义迭代器   list myList1;   list myList2; list> bigList; myList1.push_back...
  • u011806486
  • u011806486
  • 2017年08月22日 08:33
  • 174

C语言实现支持多类型的ArrayList

//ArrayList.h /*----------------------------- * * For 算法数据结构 * IDE DEV-CPP4.9.2 * Auhtor Cz...
  • JAVA2010CZP
  • JAVA2010CZP
  • 2012年11月04日 21:14
  • 5078

用C语言写一个数组,实现类似JAVA语言中ArrayList的功能

此程序是在看过郝斌老师的数据结构与算法的视频后,自己用C语言实现的。整个程序比较简单,适合入门数据结构时练手。 #include #include #include #define true ...
  • Leo____Wang
  • Leo____Wang
  • 2016年10月25日 08:44
  • 1030

C语言实现的链表list

  • 2010年06月09日 00:09
  • 2KB
  • 下载

list,queue 纯C语言 简洁实现

  • 2012年07月06日 13:06
  • 8KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[List]C语言实现链表
举报原因:
原因补充:

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