链表------创建删除增加遍历

原创 2016年08月28日 16:16:23

LINKED LIST

创建链表

#include <stdio.h>
#include<stdlib.h>
#include<time.h>

struct ListNode
{
    int data;
    ListNode *next;
};

void CreateListHead(ListNode **head, int n)
{
    ListNode *p;
    ListNode *q;

    srand(time(0)); //初始化随机种子
    *head = (ListNode *)malloc(sizeof(ListNode));
    q = *head;
    for(int i = 0; i < n; i++){
        p = (ListNode *)malloc(sizeof(ListNode));
        p->data = rand()%100+1;
        q->next = p;
        q = p;
    }
    p->next = NULL;
}

遍历整个表

void PrintfList(ListNode **head)
{
    ListNode *p;
    p = *head;
    while(p = p->next){
        printf("%d  ",p->data);
    }
}

删除整个表

bool ClearList(ListNode **head)
{
    ListNode *p;
    ListNode *q;

    p = (*head)->next;
    while(p){
        q = p->next;
        free(p);
        p = q;
    }
    (*head)->next = NULL;
    return 1;
}

插入一个结点

void ListInsert(ListNode **head, int i, int a)
{
    int j = 1;

    ListNode *p;
    ListNode *q;
    p = (*head);

    while(p && (j < i)){
        j++;
        p = p->next;
    }

    q = (ListNode *)malloc(sizeof(ListNode));
    q->data = a;
    q->next = p->next;
    p->next = q;

}

删除一个结点

void ListDelete(ListNode **head, int i)
{
    int j = 1;

    ListNode *p;
    ListNode *q;
    p = (*head);

    while(p && (j < i)){
        j++;
        p = p->next;
    }
    q = p->next;
    p->next = q->next;
    free(q);
}
int main()
{
    int n = 9;
    int i = 4;
    int a = 99;
    ListNode *listNode;

    CreateList(&listNode ,n);
    PrintfList(&listNode);
    ListInsert(&listNode, i, a);
    printf("\n");
    PrintfList(&listNode);
    ListDelete(&listNode,i);
    printf("\n");
    PrintfList(&listNode);
    //if(ClearList(&listNode))
    //  printf("\n OK! \n");
    return 0;
}

循环列表就是把单链表结尾指向空指针改为指向头结点。
双向链表在单链表的没个节点中,在设置一个指向其前驱结点的指针域

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

(补充实验方法) linux内核链表之实例 这个例子包括简单的增、删、遍历

linux内核链表之实例 + 实验  参考:http://blog.csdn.net/lufeiop02/article/details/6526382 基本知识可以看这个网址 深入分析 L...
  • wenhui_
  • wenhui_
  • 2011年09月17日 12:02
  • 1984

c++ 链表操作:添加、遍历、删除、查找

链表是一种动态数据结构,因为在创建链表的时候,无需知道链表的长度。链表的每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 struct node { int ...
  • yes1cpp
  • yes1cpp
  • 2014年02月09日 17:32
  • 5274

C语言链表的创建和遍历

链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”...
  • tihumenjiang
  • tihumenjiang
  • 2017年03月20日 14:56
  • 361

C语言实现单链表创建和遍历

创建单链表有多种方式,我这里介绍从尾部添加新节点的创建方式。 创建的过程: 1.定义节点的数据结构 c语言中链表节点是用结构体来实现,创建之前要明白数据域需要什么类型的数据。例如: //定义链表中...
  • qlzx_syzx
  • qlzx_syzx
  • 2016年07月28日 15:58
  • 5653

两种方法实现单向链表的创建、遍历、删除、查找、逆序输出(循环法和递归法)

一个简单结点的结构体表示为: typdef struct note { int data; /*数据成员可以是多个不同类型的数据*/ struct note *next; /*指针变量,用于指向下一结...
  • HandsomeHong
  • HandsomeHong
  • 2017年05月13日 23:38
  • 343

链表的创建与遍历

//2012年9月12日 早上 # include # include # include typedef struct Node { int data; struct Node *pNext; ...
  • Sun19910114
  • Sun19910114
  • 2014年08月19日 16:29
  • 416

Java学习之单链表创建以及正向遍历和反向遍历方法

链表是一种存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。原先是在C语言的学习中有遇到过,Java中的链表第一次遇到是在一家公司的面试题中。链表的种类有单链表、...
  • FiveNineMinutes
  • FiveNineMinutes
  • 2016年08月30日 21:42
  • 438

java实现单链表,功能有插入,删除,遍历。

public class Code {private int data;private Code next;public int getData() { return data;}public voi...
  • raindew1985
  • raindew1985
  • 2007年06月27日 02:12
  • 3037

线性表之单向链表的创建、插入、删除和清除

1.源程序 list.c #include #include typedef struct node{ int num; char name[128]; struct node *...
  • tankai19880619
  • tankai19880619
  • 2013年10月09日 14:34
  • 3425

遍历Linux kernel的链表时删除元素的方法

内核的链表list_head设计相当巧妙。今天我说一下对list_head链表的遍历时如何删除元素。         链表遍历时,如果删除当前元素,一般都是会出错的。在所有语言的各种库中的链表都是如此...
  • shendl
  • shendl
  • 2011年05月05日 19:10
  • 5545
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:链表------创建删除增加遍历
举报原因:
原因补充:

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