精华内容
下载资源
问答
  • 创建一个链表

    万次阅读 多人点赞 2018-08-24 23:33:46
    不知道为什么总是忘了对链表的操作, 主要就是平时用的少, 希望自己通过写这编文章能加深对链表操作的印象 目录 1.首先得要有两基本的头文件 2.再然后得要有结构体 3. 这部分是函数前置声明 4.链表初始化 ...

     不知道为什么总是忘了对链表的操作, 主要就是平时用的少, 希望自己通过写这编文章能加深对链表操作的印象

    目录

    1.首先得要有两个基本的头文件

    2.再然后得要有个结构体

     3. 这部分是函数前置声明

    4.链表初始化

     5.插入节点

     6.打印整个链表

    7. 释放整个链表的内存

     8.整个程序示例

    9.打印结果


     

    1.首先得要有两个基本的头文件

    #include<stdio.h>       //用于scanf, printf 标准输入输出
    
    #include<stdlib.h>      //用于malloc, free 内存申请及释放

    2.再然后得要有个结构体

    一个节点就像火车的一节车厢, data是车厢里面的东西, next相当于一个钩子, 用于将车厢之间的连接起来

    typedef struct node          //typedef 用于取struct node 的别名
    {
            int data;
            struct node *next;
    }*PNODE, NODE;                // PNODE 就是 struct node *  ,  NODE就是 struct node

     3. 这部分是函数前置声明

    PNODE init();                           //链表初始化
    void insert(PNODE head, int newdata);   //插入节点
    void print(PNODE head);                 //打印整个链表
    void freeAllNode(PNODE head);           //释放整个链表的内存

    4.链表初始化

    定义一个节点, 其在整个链表操作中都不存储数据, 比较特殊, 与head直接相连

    PNODE init()
    {
    	PNODE temp = (PNODE)malloc(sizeof(NODE));  //定义一个节点
    	temp->next = NULL;                    //这个节点比较特殊, 它不用于存储数据
    	return temp;
    }

     5.插入节点

    插入节点有两种方式: 1是头插, 2是尾插

    先看头插

    void insert(PNODE head,int newdata)
    {
    
    	PNODE temp=(PNODE)malloc(sizeof(struct node));  //先开辟一块内存用于存放要插入的数据
    	temp->data = newdata;
            
            //头插
    	temp->next = head->next;    //head->next就是节点A, 将temp连向A
    	head ->next= temp;          //将head相向temp
    }

    再看尾插

    void insert(PNODE head,int newdata)
    {
    
    	PNODE temp=(PNODE)malloc(sizeof(struct node));
    	temp->data = newdata;
    
    	//尾插
    	PNODE p; // = (PNODE)malloc(sizeof(NODE)); //这里应该是不需要申请空间的,谢谢网友指正
    	p = head;
    	while (p->next != NULL) p = p->next;  //先定义一个p, 使它指向最后一个节点
    	p->next = temp;                       //将p连向temp
    	temp->next = NULL;                    //temp连向NULL
    }

     6.打印整个链表

    链表的打印只能从head开始遍历, 不能像数组可以使用下标那么便利

     

    void print(PNODE head)
    {
    	PNODE temp=head->next;   //定义temp指向A, 即第一个有内容的节点('空的'的下一个节点)
    	while (temp!=NULL)       //在temp不为NULL是, 一直循环, 直到temp==NULL, 即遍历完了
    	{
    		printf("%d->", temp->data);  //打印节点里面的data
    		temp = temp->next;          //指针的移动, 指向下一个节点
    	}
    	printf("NULL\n");
    }

    7. 释放整个链表的内存

    void freeAllNode(PNODE head)
    {
    	PNODE p = head,temp;
    	while (p != NULL)
    	{
    		temp = p->next;
    		free(p);
    		p = temp;
    	}
    }

     8.整个程序示例

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct node
    {
    	int data;
    	struct node *next;
    }*PNODE,NODE;
    void insert(PNODE head, int newdata);
    void print(PNODE head);
    PNODE init();
    void freeAllNode(PNODE head);
    int main()
    {
    	PNODE head = init();    //接受init()的返回值, 即指向了temp
    	for (int i = 0; i < 10;i++)
    	 insert(head,i);
    	print(head);
            freeAllNode(head);
    	return 0;
    }
    PNODE init()
    {
    	PNODE temp = (PNODE)malloc(sizeof(NODE));
    	temp->next = NULL;
    	return temp;
    }
    void insert(PNODE head,int newdata)
    {
    
    	PNODE temp=(PNODE)malloc(sizeof(struct node));
    	temp->data = newdata;
    	//头插
    	temp->next = head->next;
    	head ->next= temp;
    #if 0
    	//尾插
    	PNODE p; // = (PNODE)malloc(sizeof(NODE)); //相应的这里p不需要申请空间
    	p = head;
    	while (p->next != NULL) p = p->next;
    	p->next = temp;
    	temp->next = NULL;
    #endif
    }
    void print(PNODE head)
    {
    	PNODE temp=head->next;
    	while (temp!=NULL)
    	{
    		printf("%d->", temp->data);
    		temp = temp->next;
    	}
    	printf("NULL\n");
    }
    void freeAllNode(PNODE head)
    {
    	PNODE p = head,temp;
    	while (p != NULL)
    	{
    		temp = p->next;
    		free(p);
    		p = temp;
    	}
    }

    9.打印结果

    9->8->7->6->5->4->3->2->1->0->NULL
    请按任意键继续. . .
    

     

    展开全文
  • 怎样创建一个链表

    千次阅读 2016-05-15 17:55:20
    1新建一个函数,用来创建链表的头结点,这里有一个问题,传入的参数是什么呢,是指针还是?  如果用指针做为函数的参数,等到函数结束的时候,它的内存会被释放,所以在函数的外部就无法传递这个指针的值,导致这...

    C语言

    1新建一个函数,用来创建链表的头结点,这里有一个问题,传入的参数是什么呢,是指针还是?

            如果用指针做为函数的参数,等到函数结束的时候,它的内存会被释放,所以在函数的外部就无法传递这个指针的值,导致这部分的内存无法被使用。

    所以我们在这里有指针的指针做为函数的传入参数。

    2建立一个链表,新加入一个新的结点,这里需要进行判断,当向头结点之前进行插入时,是将新的结点的next值指向head,然后再将head指向pnew这个新的结点,

    如果是插入到这个链表的末尾,则需要用while找到链表的最后一个结点,将它的next值指向pnew,再将pnew的next指向null,

    最后是插入到链表中的结点,先while找出需要插入的结点(用for循环 i=0则指向的是本身,i=1 指向的是它前一个结点),然后用pnew的next值指向找到结点的next的值,最后用找到的结点的next指向pnew结点。

    3删除一个结点

    先找到需要删除的结点,用它上一个结点的next指向下下一个结点(就是将删除的结点跳过去),再将需要删除的结点d4elete

    4单向链表的逆序

    新建三个指针,分别指向头结点,头结点的下一个结点,和第三个结点,第一步,将第三个结点用指针保存起来,然后,第二个结点的next指向第一个结点,再将第一,二,三个结点后移,直到第一个结点为null结束。

    
    展开全文
  • 用java如何创建一个链表,当前节点之前一个节点怎么表示,如果不可以表示的话那么怎么用插入的节点和其他节点比较
  • C语言创建一个链表的代码

    千次阅读 2019-01-23 12:28:08
    把开发过程常用的一些代码做个收藏,下边代码是关于C语言创建一个链表的代码。 #include "stdlib.h" #include "stdio.h" struct list { int data; }; typedef struct list node; void main() { ...

    把开发过程常用的一些代码做个收藏,下边代码是关于C语言创建一个链表的代码。

    #include "stdlib.h"
    #include "stdio.h"
    struct list
    { int data;
    };
    typedef struct list node;
    void main()
    { link ptr,head;
    int num,i;
    ptr=(link)malloc(sizeof(node));
    ptr=head;
    printf("please input 5 numbers==>n");
    for(i=0;i<=4;i++)
    {
     scanf("%d",&num);
     ptr->data=num;
     ptr->next=(link)malloc(sizeof(node));
     if(i==4) ptr->next=NULL;
     else ptr=ptr->next;
    }
    ptr=head;
    while(ptr!=NULL)
    { printf("The value is ==>%dn",ptr->data);
     ptr=ptr->next;
    }
    }
    
    展开全文
  • 创建一个链表实例

    千次阅读 2014-12-16 15:15:13
    #include #include /* 提供malloc()原型 */ #include //提供strcpy原型 #define TSIZE 45 struct film { char title[TSIZE]; int rating; struct film * next; //指向链表
    <span style="font-family:KaiTi_GB2312;font-size:18px;">#include <stdio.h>
    #include <stdlib.h>             /* 提供malloc()原型 */
    #include <string.h>             //提供strcpy原型
    
    #define TSIZE  45
    struct film
    {
        char title[TSIZE];
        int rating;
        struct film * next;             //指向链表的下一个结构
    };
    
    int main(void)
    {
        struct film * head = NULL;
        struct film * prev, * current;
        char input[TSIZE];
    
    //收集并存储信息
        puts("Enter first movie title:");
        while(gets(input) != NULL && input[0] != '\0')
        {
            current = (struct film *)malloc(sizeof(struct film));
            if(head == NULL)
            head = current;
            else
            prev->next = current;
    
            strcpy(current->title,input);
            puts("enter your rating<0-10>:");
            scanf("%d",¤t->rating);
    
            while(getchar()!='\n')
                continue;
            puts("Enter next movie title(empty line to stop):");
            prev = current;
        }
    
        if(head == NULL)
        {
            printf("no data entered!");
        }
        else
        printf("Here is the movie list:\n");
    
        current = head;
    
        while(current != NULL)
        {
             printf("Movie :%s Rating : %d\n",current->title,current->rating);
            current = current->next;
        }
    
        printf("Bye!!\n");
    
        return 0;
    
    
    }
    </span>
    <span style="font-family:KaiTi_GB2312;font-size:18px;">
    </span>

    创建链表包括三个步骤:

    1、使用malloc()函数为一个结构分配足够的空间

    2、存储这个结构的地址

    3、把正确的信息复制到这个结构中


    展开全文
  • 目录创建链表(头插法)创建链表(尾插法)反转链表 创建链表(头插法) 我们知道,在数据结构中链表一般有两个部分:data以及指针域next。 那么怎么通过data以及next创建一个链表呢? 万物皆有开端,所以我们首先需要...
  • 创建一个双向链表或双向循环链表

    千次阅读 2015-10-12 09:06:02
    #include #include #define len sizeof(struct list) struct list { int x; struct list *pre,*next;...struct list * create()//创建链表并返回链表的首地址 { struct list *p,*p1,*head; head=p=(struct list
  • 链表是一种动态的数据结构,不同于...然而链表的灵活性在于它的每个元素节点分为两部分,一部分是存储元素本身,另一部分是指向下一个节点元素的引用,也可以称为指针,当你要插入数据时,把上一个节点的向下指针...
  • 创建一个单链表 那什么是单链表? 简单说一下 我的理解,其实链表和数组是有很多相似的地方的。链表作为一种数据结构,它是用来存储数据的,举一个很形象的例子...下面是创建一个链表的代码式例 写的很简单,用了一
  • C语言 创建一个简单的链表 个人C语言学习之路(欢迎交流,相互学习): 用面向对象的思维,更规范地使用C语言。 ->首先我们定义了一个链表的结构体 ->里面简单封装了链表自身的属性(存放的数据,指向下一个...
  • 创建并输出一个链表

    2018-03-12 23:38:02
    /*创建节点*/ .../*创建一个链表*/ node *create() { node *p1, *p2,*head; head = NULL; p1 = p2=(node *)malloc(Len(node)); head = p1; cin &gt;&gt; p1-&gt;n; while (p1-&gt;n...
  • 链表种常见的重要的数据结构,它是动态的进行内存存储分配的种结构。 用数组存放数据时,必须事先定义固定的长度(即元素数),但是事先难以确定有多少元素时,则必须把数组定义的足够大,以保证成功。...
  • 如何使用C语言创建一个单向链表标题 #include<stdio.h> #include<stdlib.h> typedef struct list { int nValue; struct list *pNext; }List; List *CreateList() { int num; int value; List *...
  • 现在我们用C语言实现一个链表
  • 创建一个有序链表

    千次阅读 2014-05-19 17:12:21
    #include using namespace std; struct Node//节点结构体 { int n; Node *next; }; void Insert(Node *H, int n);//有序插入节点函数 ...//输出链表 int main(int argc, char const *argv[]) { int n; Node *
  • 链表种常见的重要的数据结构,它是动态的进行内存存储分配的种结构。   用数组存放数据时,必须事先定义固定的长度(即元素数),但是事先难以确定有多少元素时,则必须把数组定义的足够大,以保证成功...
  • //创建一个链表,可以插入学生信息、删除学生信息。 #include  #define NULL 0 #define TYPE struct student #define LEN sizeof (struct student) using namespace std; struct student  ...
  • 创建一个静态链表

    千次阅读 2014-12-13 09:38:51
    ) /* 创建一个链表 传入的是结构体指针 */ { UINT32 u32length = 0U, u32i = 0U; INT32 i32OSM = 1; if ( 0U == L->u32length )/* 判断链表存在,如果存在就不用创建 */ { i32OSM = OSM_Printf(" 静态链表已经...
  • // 遍历数组建立有序链表.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std;...//创建一个链表,输入从头到尾结点的值,输入-1表示结束 void AddIte
  • 创建链表一个从无到有的过程。 空链表是有序的 只有一个结点的链表是有序的 把一个结点,加入到一个有序链表中去,使其仍然有序. 那么我们就需要一个插入操作 **找插入位置** 从小到大顺序 在链表中去...
  • 创建一个有序的链表

    千次阅读 2014-06-05 22:50:04
    创建有序链表的基本思路就是在插入一个新节点之前,先按有序查找到新节点应该插入的位置,然后再插入! //代码实现环境:windows 7 32bit + MinGW + Sublime Text 3 #include <iostream> using ...
  • 创建一个最简单的链表,插入和删除

    万次阅读 多人点赞 2018-09-04 21:38:43
    一、头插法创建链表:   #include &lt;stdio.h&gt; struct list { int num; struct list *next; }; typedef struct list list_single; list_single *creat_list_tail(int n)//尾插法创建一个链表,...
  • 用Java创建一个循环链表例子

    千次阅读 2017-11-15 20:01:43
    题目:一群人围在一起丢手绢,开始指定从第m个人开始,然后瞬时针数k下,第k个人出列,剩下的人继续从0开始数到k,第k个人再次出列,问,最后一个人是谁? 代码如下: package com.cyclink; public class CycLink...
  • 将两个有序链表合并成一个链表

    万次阅读 多人点赞 2018-08-04 17:05:37
    创建好两个有序链表之后,将两个链表的头结点进行比较,小的那个作为合并后的链表的头结点,同时,创建两个指针分别指向两个链表的的头结点或头结点的下一个节点,当两个链表进行比较的元素都不为空的话,依次从下到...
  • 如何创建链表

    万次阅读 多人点赞 2019-07-17 20:11:54
    引言: 最近我们c语言课学到了链表,好多同学都在说:“哇!链表怎么这么难,根本看不懂呀!...创建链表: 其实创建一个链表也很简单,在我看来,可以分为以下几步: 1.创建头结点。(命名为:head...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 341,315
精华内容 136,526
关键字:

创建一个链表