`
hojor
  • 浏览: 109247 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C链表实现(单向,双向)

阅读更多

一、单向链表

#include <stdio.h>
#include <stdlib.h>
#define FALSE 0
#define TRUE  1
//#include "link.h"
typedef struct NODE
{
        struct NODE *link;
        int          value;
}Node;
//createNode()
Node * createNode(int value)
{
     Node *node;
     node = (Node*)malloc(sizeof(Node));
     if(node!=NULL)
     {
         node->value = value;
         node->link = NULL;   
     }
     else
     {
        printf("Not Enough Memory!\n"); 
     }
}
//sortinsert()
int sortInsert(register Node**linkp,int new_value)
{
 		register Node *current;
 		register Node *new;
 		
 		while((current = *linkp)!=NULL && current->value<new_value)
		   linkp = &current->link;
   
    new = (Node*)malloc(sizeof(Node));
    if(new == NULL)
       return FALSE;
    new->value = new_value;
    new->link = current;
    *linkp = new ;
    return TRUE;
}
//freeLinkList()
void freeLinkList(Node * head)
{ 
    if(head == NULL) 
    { 
        printf("\n Empty memory! \n"); 
        return; 
    } 
    Node *ptr = head;
    Node * curr;
    while(ptr->link != NULL)
    {
        curr = ptr;
        ptr = ptr->link;
        free(curr);  
    }
    free(ptr);
}
//printLinkList()
void printLinkList(Node * head)
{
     if(head == NULL) 
         return;
     while(head->link != NULL)
     {
         head = head->link;
         printf("%d -> ",head->value);
     }
     putchar('\n');
}
//main()
int main(int argc, char *argv[])
{
  Node * head;
  head = (Node*)malloc(sizeof(Node));
  int i;
  for(i=0;i<10;i++)
  {
          Node * newNode = createNode(i);
          newNode->link = head->link;
          head->link = newNode;
  }
  printLinkList(head);
  sortInsert(&head->link,13);
  sortInsert(&head->link,10);
  printLinkList(head);
  
  freeLinkList(head);
  system("PAUSE");	
  return 0;
}

 

二、双向链表

#include<stdio.h>
#include<stdlib.h>
#define FALSE 0
#define TRUE  1

typedef struct NODE
{
 				struct NODE *fwd;
 				struct NODE *bwd;
 				int         value;
}Node;
//插入节点 
int dll_insert(register Node * rootp,int value)
{
 		register Node * this;
 		register Node * next;
 		register Node * newnode;
 		
 		for(this =rootp;(next = this->fwd)!=NULL;this = next)
 		{
		 				 if(next->value == value)
								return FALSE;
			       if(next->value > value)
								break;
    }
    
    newnode = (Node*)malloc(sizeof(Node));
    if(newnode == NULL)
      return -1;
    newnode->value = value;
    /*插入新节点*/
    newnode->fwd = next;
    this->fwd =newnode;
    newnode->bwd = this != rootp ? this : NULL;
    (next != NULL ? next:rootp)->bwd = newnode;	
 		return 1;
}
//打印链表 
void printLinklist(Node * rootp)
{
 		 if(rootp == NULL)
				return;
     Node * temp = rootp;
     while(temp->fwd != NULL)
     {
				temp = temp->fwd;
				printf("%d->",temp->value);
		 }
		 printf("NULL\n");
}
//释放链表空间 
void freeLinkList(Node * rootp)
{ 
    if(rootp == NULL) 
    { 
        printf("\n Empty memory! \n"); 
        return; 
    } 
    Node *ptr = rootp;
    Node * curr;
    while(ptr->fwd != NULL)
    {
        curr = ptr;
        ptr = ptr->fwd;
        free(curr);  
    }
    free(ptr);
}
//main
int main(int argc, char *argv[])
{
 		Node * rootp;
 		rootp = (Node*)malloc(sizeof(Node));
 		rootp->bwd = NULL;
 		rootp->fwd = NULL;
 		int i;
 		for(i=0;i<10;i++)
 		{
        dll_insert(rootp,i);
 		}
 		printLinklist(rootp);
 		freeLinkList(rootp);
    system("PAUSE");	
    return 0;
} 

 

2
1
分享到:
评论

相关推荐

    C语言自学链表,单向链表,双向链表,适合新手学习。

    本资源提供的是针对初学者设计的链表学习材料,包括单向链表和双向链表的实现。下面将详细讲解这两种链表的数据结构及其操作。 1. **单向链表**: 单向链表是一种线性数据结构,每个节点包含两部分:数据域和指针...

    C语言实现的单向链表和双向链表

    本主题将深入探讨由C语言实现的单向链表(slist.h)和双向链表(blist)。这两种链表各有特点,适用于不同的场景,对于理解和掌握数据结构与算法至关重要。 ### 单向链表(slist.h) 单向链表是一种线性数据结构,...

    c语言 链表 双向链表 双向循环链表

    本文将深入探讨C语言实现的双向链表和双向循环链表,以及如何将这些概念应用于Linux内核。双向链表与单向链表相比,具有更灵活的操作特性,而双向循环链表则在此基础上增加了循环的特性,使得遍历和操作更加方便。 ...

    航班订票系统(单向,双向循环链表)

    在实现过程中,我们看到有"Main.cpp"作为主程序入口,负责调用其他模块,如"LinearListLink.cpp"和"DoubleListLink.cpp"分别实现了单向链表和双向循环链表的相关操作。"PlaneData.dat"可能是存储航班数据的二进制...

    单向链表,双向链表示例

    在本案例中,我们将深入探讨单向链表和双向链表的概念,以及它们在C语言中的实现。 单向链表是由一系列节点组成,每个节点包含两个部分:数据域和指针域。数据域用于存储实际的数据,而指针域则指向下一个节点。...

    C语言单向建立链表的代码实现

    本文将详细介绍如何使用C语言实现单向链表的创建、输入和输出。 #### 单向链表的基本概念 单向链表是一种线性表,其中每个元素(节点)包含一个数据域和一个指向其后继节点的指针域。单向链表的主要特点是节点只能...

    C语言实现通用双向链表标准版.rar

    本资源“C语言实现通用双向链表标准版.rar”提供了一个使用C语言实现的通用双向链表实例,这对于理解和掌握数据结构,尤其是链表操作具有重要意义。 双向链表是一种线性数据结构,与单向链表不同,它允许节点在两个...

    C语言单向链表、顺序表、双向链表、循环链表代码实现

    链表实现(单向链表、顺序表、双向链表、循环链表)的相关代码

    C语言链表课程设计——仓库管理系统.rar

    在本项目中,"C语言链表课程设计——仓库管理系统.rar"是一个基于C语言实现的仓库管理系统的源代码压缩包。这个系统利用了链表数据结构来存储和管理仓库中的物品信息,包括入库、出库、查询等操作。链表是计算机科学...

    Intel的单向链表与双向链表,C语言源码

    `LinkedList.c`和`LinkedList.h`中应该包含了Intel如何使用C语言实现双向链表的详细代码,包括节点定义、链表初始化、添加和移除节点等功能。 C语言是系统编程和嵌入式开发中的常用语言,其特性允许直接操作内存,...

    数据结构 单向链表 双向链表 源程序

    在"第一、二章"的压缩文件中,很可能包含了实现单向链表和双向链表操作的C、C++、Java或Python等语言的源代码示例。这些示例程序可能涉及了初始化链表、插入新节点、删除指定节点、查找特定元素、打印链表内容等功能...

    DOUBLE_LINK.rar_DOUBLE_LINK_doublelink_双向链表_双向链表C语言_链表 实现

    双向链表(Double-Linked List)是一种数据结构,它与单向链表相似,但每个节点不仅包含指向下一个节点的指针,还包含一个指向前一个节点的指针。这种设计使得在链表中的前进和后退操作同样高效,而单向链表只能从前...

    c语言实现单向链表.

    本文将深入探讨如何使用C语言来实现单向链表,并扩展到实现双向链表的“增删改查显”功能。 首先,让我们了解链表的基本概念。链表是一种线性数据结构,与数组不同,它在内存中不是连续存储的。每个链表节点包含两...

    链表(C语言实现)

    链表分为单向链表、双向链表和循环链表,这里提到的链表可能是单向链表,因为没有提及反向指针。 2. **文件功能**: - `main.c`:主程序,负责调用其他功能函数并实现交互式菜单。 - `CreateHead.c`:创建链表头...

    C语言链表相关面试题.zip

    C语言链表相关的面试题在软件开发领域的面试中是非常常见的,这是因为链表作为一种基本的数据结构,对于理解数据结构、算法以及内存管理等方面有着重要的作用。以下是一些关于C语言链表的面试题及其详细解释。 1. ...

    数据结构-双向链表

    与单向链表相比,双向链表允许双向遍历,即可以从前往后也可以从后往前访问元素,增加了数据操作的灵活性。 在实现双向链表时,我们需要定义一个节点结构体,通常包含三个部分:数据域、前驱指针和后继指针。数据域...

    双向链表的C语言实现源码,十分简单易懂

    本资源是关于用C语言实现双向链表的源代码,非常适合初学者理解和学习。 首先,我们要了解双向链表的基本结构。每个节点通常包含三个部分:数据域(用于存储实际数据)、前向指针(指向下一个节点)和后向指针...

    双向循环链表C代码实现

    与单向链表不同,双向循环链表的每个节点都有两个指针,一个指向其前一个节点,另一个指向其后一个节点。这种结构在实现队列、栈和其他高级数据结构时非常有用。 双向循环链表的主要优点在于它的灵活性。由于我们...

    模板实现c语言版的单双向链表,有例子程序,绝对好用

    总结来说,本示例中,我们利用C语言的宏定义实现了模板化的单双向链表,提供了创建、插入和删除节点的通用方法。这使得我们可以在不同场景下灵活地使用链表数据结构,而不必为每种数据类型编写单独的代码。

    数组、单链表和双链表介绍以及双向链表的CC++Java实现 数组和链表.pdf

    数组、单链表和双链表介绍以及双向链表的C、C++和Java实现 在计算机科学中,数组、单链表和双链表是最基本的数据结构。它们都是线性表的实现方式,具有相同类型的n(n≥0)个数据元素组成的有限序列。 数组 数组是...

Global site tag (gtag.js) - Google Analytics