`
polyahu
  • 浏览: 23158 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

C语言实现链表

    博客分类:
  • C
c 
阅读更多
大作业水平...
#include<stdio.h>
#include<stdlib.h>

struct node{
    struct node* next;
    int c;
};

struct node* init_node(int input)
{
    struct node* p;
    p = malloc(sizeof(struct node));
    p->c = input;
    return p;
}

void insert_node(struct node *head, int new)
{
    struct node *temp = (struct node*)(malloc(sizeof(struct node)));
//    struct node *temp;
    while(head->next != NULL)
        head = head->next;
    head->next = temp;
    temp->c = new;
    temp->next = NULL;
}

void display_list(struct node* head){
    if(head == NULL)
    {
      printf("error.\n");
      return;
    }
    struct node *p = head;
    while(p->next != NULL)
    {
        printf("%d ",p->c);
        p = p->next;
    }
    printf("%d ", p->c);
    printf("NULL\n");
}

void destroy_list(struct node *head)
{
    if (NULL != head) {
        destroy_list(head->next);
//        free(head->c);
        free(head);
        printf("destroy a list...\n");
    }
}

struct node* copy_list(struct node* head)
{
  struct node* p = (struct node*)(malloc(sizeof(struct node)));
  p->next = NULL;
  if(head == NULL)
  {
    printf("head is NULL.\n");
    return;
  }
  p->c = head->c;
  head = head->next;
  while(head != NULL)
  {
    printf("copying... head->c: %d\n", head->c);
    insert_node(p, head->c);
    head = head->next;
  }
//  insert_node(p, head->c);
  return p;
}

struct node* reverse_list(struct node* head)
{
  struct node* p;
  struct node* t;
  p = (struct node*)(malloc(sizeof(struct node)));
  p->c = head->c;
  p->next = NULL;
  while(head->next != NULL)
  {
    head = head->next;
    t = p;
    p = (struct node*)(malloc(sizeof(struct node)));
    p->next = t;
    p->c = head->c;
  }
  return p;
}

int main(int argc, char** argv)
{
    struct node *head = init_node(1);
    long long i;
    insert_node(head, 2);
    insert_node(head, 3);
    insert_node(head, 4);
    insert_node(head, 5);
    insert_node(head, 6);
    insert_node(head, 7);
    display_list(head);
    struct node* copy = copy_list(head);
    printf("copy done.\n");
    struct node* reve = reverse_list(head);
    display_list(reve);
    for (i = 0; i < 0x1000000; i++) reve = reverse_list(head);
    display_list(reve);
    display_list(copy);
    destroy_list(head);
    destroy_list(copy);
    return 0;
}

分享到:
评论

相关推荐

    C语言实现链表的基本操作

    选择合适的存储方式实现线性表。其中,必须实现的线性表基本操作为:InitList、 ClearList、ListEmpty、ListLength、GetElem、PriorElem、ListInsert、ListDelete这8个基本操作,其余的可以选作。

    C语言实现链表通讯录

    在本项目中,"C语言实现链表通讯录"是一个典型的C语言编程任务,它结合了数据结构(链表)和数据库(MySQL)的应用。这个课程设计的目标是创建一个能够与MySQL数据库交互的C语言程序,以管理联系人信息。下面我们将...

    链表(C语言实现)

    链表是一种基础且重要的数据结构,它在计算机科学中扮演着关键角色,特别是在处理动态...以上是对"链表(C语言实现)"主题的详细阐述,涵盖了链表的基本概念、文件功能、操作流程、局限性以及C语言实现链表的关键点。

    C语言实现链表,创建、插入、查找、删除、遍历等基本操作

    在本主题中,我们将深入探讨如何使用C语言实现链表的基本操作,包括创建、插入、查找、删除和遍历。 1. **链表创建**: 创建链表首先需要定义一个结构体类型来表示链表的节点,通常包含数据部分和指向下一个节点的...

    C语言实现链表操作,增加删除显示链表

    以上就是C语言实现链表操作的基础。这些操作可以用于构建更复杂的数据结构,如队列、栈或图。在实际应用中,可能还需要考虑错误处理、内存管理以及性能优化等问题。例如,删除操作可能需要改进以处理删除链表中的第...

    C语言实现多种链表快速排序

    链表是一种重要的数据结构,它在计算机科学...总之,C语言实现链表快速排序是一项挑战性的任务,它涉及到对链表操作和递归算法的深入理解。通过这个实践,可以提升对数据结构和算法的掌握,同时也有助于提高编程技巧。

    C语言实现链表基本操作

    在这个主题中,我们将深入探讨如何用C语言实现链表的基本操作,包括创建链表、插入元素、删除元素以及遍历链表。 首先,链表不同于数组,数组中的元素在内存中是连续存储的,而链表中的节点通过指针链接,可以分散...

    用C语言实现链表排序.zip

    现在,你已经拥有了一个完整的C语言实现链表选择排序的程序。你可以创建一个链表,填充一些随机或特定的数值,然后调用`selectionSortList`函数对链表进行排序,最后通过`printList`函数验证排序结果。这种实现方法...

    C语言实现 链表操作

    C语言实现 链表操作,链表 建立 输出 删除 插入,整个程序代码,看完后会让你对链表操作有更深的体悟

    用c语言实现链表增删改查

    根据提供的文件信息,本文将详细解释如何使用C语言来实现链表的基本操作——增加、删除、修改和查询。这些操作是数据结构学习中的基础部分,对于理解更复杂的数据结构非常有帮助。 ### 一、链表简介 链表是一种...

    c语言实现链表综合系统

    链表综合系统链表综合系统链表综合系统链表综合系统

    C语言——链表的归并_c语言链表详解

    标题“C语言——链表的归并_c语言链表详解”和描述“用c语言写链表归并”明确指出了本文的主要内容:使用C语言实现链表的归并操作,并对C语言中的链表进行详细讲解。 #### 代码解析 ##### 1. 结构体定义 ```c ...

    c语言实现链表的基本操作,链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

    c语言实现链表的基本操作,链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态...

    C语言实现单向链表的创建、插入,删除节点,和2个链表合并

    总结,本篇文章介绍了C语言实现单向链表的基本操作,包括创建链表、插入节点、删除节点、判断链表是否有环以及合并两个已排序的链表。通过理解这些基本操作,可以为更复杂的数据结构和算法打下坚实的基础。在VC6.0...

    c语言中用链表实现的排序

    这是利用c语言中的链表来解决的问题,有利于你对C语言链表的更好的了解

    window平台,用c语言实现链表算法

    window平台,用clion实现c语言链表

    用C语言实现链表的各种操作

    是用C语言来实现对链表的各种操作,数据结构课程一般会用到。保证程序正确性

    C语言实现链表HuffmanTree.zip

    本项目"链表HuffmanTree"旨在利用C语言实现哈夫曼树(Huffman Tree),这是一种与链表密切相关的数据结构,广泛应用于数据压缩,如文件压缩算法。 哈夫曼编码是一种基于频率的变字长编码方法,用于无损数据压缩。它...

    使用C语言实现链表的方法.docx

    c语言链表的基本操作链表主要有以下几大特性:1、解决数组无法存储多种数据类型的问题。2、解决数组中,元素个数无法改变的限制(C99的变长数组,C++也有变长数组可以实现)。3、数组移动元素的过程中,要对元素进行大...

    使用C语言实现链表的方法研究.docx

    c语言链表的基本操作链表主要有以下几大特性: 1、解决数组无法存储多种数据类型的问题。2、解决数组中,元素个数无法改变的限制(C99的变长数组,C++也有变长数组可以实现)。3、数组移动元素的过程中,要对元素进行...

Global site tag (gtag.js) - Google Analytics