精华内容
下载资源
问答
  • C语言链表的建立、插入和删除的全部功能实际代码
  • c语言链表的操作

    2011-11-01 10:42:17
    C语言中关于链表的建立、插入、删除、显示和查询的演示,里面有具体的操作和源代码,可以上机执行!
  • C语言 动态链表的建立以及节点的删除 ** 作为一个刚接触C语言一学期不到的小白,在挣扎中写完了实验作业的一道题,C语言 动态链表的建立以及节点的删除,现在大概摸清楚了动态链表的构建流程,但是各种函数名,指针...

    **

    C语言 动态链表的建立以及节点的删除

    **
    作为一个刚接触C语言一学期不到的小白,在挣扎中写完了实验作业的一道题,C语言 动态链表的建立以及节点的删除,现在大概摸清楚了动态链表的构建流程,但是各种函数名,指针还是有点晕的。

    代码如下

    #include <stdio.h>
    #include <malloc.h>
    #define LEN sizeof(struct student)
    struct student
    {
        long num;
        float score;
        struct student*next;
    };
    int n;
    struct student*creat(void)
    {
        struct student * head;
        struct student *p1,*p2;
        n=0;
        p1=p2=(struct student*)malloc(LEN);
        scanf("%ld %f",&p1->num ,&p2->score );
        head=NULL;
        while(p1->num!=0)
        {
            n=n+1;
            if(n==1)head=p1;
            else p2->next=p1;
            p2=p1;
            p1=(struct student*)malloc(LEN);
            scanf("%ld %f",&p1->num ,&p1->score );
        }
        p2->next=NULL;
        return (head);
    }
    struct student*delete1(struct student *head)
    {
        struct student *p1,*p2;
        int x;
        scanf("%d",&x);
        p1=head;
        if(x==1)
        {
            p2=p1->next;
            free(p1);
            return p2;
        }
        else
        {
        int i=1;
        while(p1&&i<x-1)
        {
            p1=p1->next;
            i++ ; 
            }
            p2=p1->next;
            p1->next=p1->next->next;
            free(p2);
            return head;    
        }
     } 
    void print(struct student* head) //输出学生信息的函数
    {
        struct student* p;
        p = head; //p取head的地址之后,二者同时指向第一个结点的开头
        n == 0;
        printf("\n");
        if (head != NULL)
        {
            do
            {
                printf("%d%6.1f\n", p->num, p->score);
                p = p->next; //把next的地址(即下一个结点的开头)赋给p
                n++;
            } while (p != NULL);
        }
    }
    int main()
    {
        struct student*head; 
        head=creat();
        head=delete1(head);
        print(head);
     } 
    

    欢迎路过点开的大神指正
    在这里插入图片描述

    展开全文
  • C语言下单项链表的建立,包括选择建立个数与插入的结点数 基础问题
  • 以下代码可直接运行,运行结果如图: #include#includetypedefstructList{inte;...voidinitList(List*head)//构建一个长度为输入n的链表,{intn,i;List*p,*q;printf("howlongisthelink:");scanf("%d",&n);//...

    以下代码可直接运行,运行结果如图:

    b0352539a88fd574b0c7e79827e00e1b.png

    #include 

    #include

    typedef struct List

    {

    int e;

    struct List *next;

    }List;

    void initList(List *head)//构建一个长度为输入n的链表,

    {

    int n,i;

    List *p,*q;

    printf("how long is the link :");

    scanf("%d",&n);//从键盘接收一个整数存储到内存中&n所指的地址,也就是变量n中。

    p=head;

    for(i=0;i

    {

    static j=1;//【1】为了在输入前显示,这是第几个输入

    q=(List*)malloc(sizeof(List));

    if(!q)

    return;

    printf("number of  %d :",j++);//【2】为了在输入前显示,这是第几个输入

    scanf("%d",&q->e);//这个链表的值由输入决定

    q->next=NULL;

    p->next=q;

    p=p->next;

    }

    }

    void displayList(List *head)//显示链表的所有值

    {

    List *p;

    for(p=head->next;p;p=p->next)

    printf("%d ",p->e );

    printf("\n");

    }

    void destoryList(List *head)//释放一个链表

    {

    List *p;

    while(head->next) {

    p=head->next;

    head->next=p->next;

    free(p);

    }

    free(head);

    }

    void insertList(List *head,int x)//在链表末尾添加一个值

    {

    List *p=head;

    while(p->next) {

    p=p->next;

    }

    p->next=(List*)malloc(sizeof(List));

    p->next->e=x;

    p->next->next=NULL;

    }

    void deleteList(List *head,int x)//删除所有值为x的结构,如任意值都不是x,则返回No element to delete

    {

    List *p,*pre;

    int flag=1;

    for(p=head->next;p;p=p->next)

    {

    if(p->e==x)

    {

    pre->next=p->next;

    free(p);

    p=pre;

    flag=0;

    }

    pre=p;

    }

    if(flag)

    printf("No element to delete!\n");

    }

    int main()

    {

    int x;

    List *head=(List*)malloc(sizeof(List));//建立头结点

    initList(head);                        //初始化指针

    displayList(head);

    printf("Input a integer to insert:");   //增加一个结点并显示链表

    scanf("%d",&x);

    insertList(head,x);

    printf("Processed list:");

    displayList(head);

    printf("Input a integer to delete:");//删除一个结点,并显示链表

    scanf("%d",&x);

    deleteList(head,x);

    printf("Processed list:");

    displayList(head);

    destoryList(head);                 //释放一个链表

    return 0;

    }

    展开全文
  • ``` #include #include ...当调用add的函数时显示停止工作,这段代码是为了建立一个链表和插入链表的实现。。求大神解答。。 ps:觉得麻烦的话不用改正,告诉我为什么会出现这种情况就行了。 在此拜谢orz
  • **链表C语言中最难一个内容,掌握链表,并且不看返利,单独写出无问题的链表基础操作的代码,可以说已经初步掌握了C语言这门程序语言,以下为博主自己写的链表操作代码,注释较多,清晰易懂,大家可以参考以下。...

    **链表是C语言中最难的一个内容,掌握链表,并且不看返利,单独写出无问题的链表基础操作的代码,可以说已经初步掌握了C语言这门程序语言,以下为博主自己写的链表操作代码,注释较多,清晰易懂,大家可以参考以下。
    我也没学多久,有问题也可以加博主QQ:2942504702 一起交流。**

    #include<stdio.h>
    #include<stdlib.h>
    #define LEN sizeof(struct node)
    typedef struct node//用typedef代替结构体类型
    {
        int num;
        float data;
        struct node *next;
    } Node;
    Node *creat(void);//链表建立函数声明
    void print(Node *head);//输出
    void del(Node *head);//删除
    void insert(Node *head);//插入
    int main()
    {
        Node *head;
        head=creat();//调用链表创建函数 返回一个头指针地址
        del(head);
        insert(head);
    }
    Node *creat(void)
    {
        int n=0;
        Node *p1,*p2,*head;
        head=NULL;
        printf("输入链表结点数据:\n");
        p1=p2=(Node *)malloc(LEN);//第一个节点开辟一个空间
        scanf("%d%f",&p1->num,&p1->data);
        while(p1->num!=0)//以0为输入结束标志
        {
            n++;//记录节点数
            if(n==1) head=p1;//n为1 第一个节点做表头
            else p2->next=p1;//继续开辟结点
            p2=p1;//下一个节点地址赋给p2备用
            p1=(Node *)malloc(LEN);
            scanf("%d%f",&p1->num,&p1->data);
        }
        p2->next=NULL;//表尾
        return head;//返回链表首地址
        printf("输出链表数据:\n");
        print(head);
    }
    void print(Node *head)
    {
        Node *p;
        if(head==NULL) printf("\n无任何数据可以输出\n");
        for (p=head; p!=NULL; p=p->next)
            printf("%d \t %.2f\n",p->num,p->data);
        printf("\n");
    }
    void del(Node *head)
    {
        int del_num;
        Node *p1,*p2;
        printf("\n输入链表中要删除的结点:\n");
        scanf("%d",&del_num);
        p1=p2=head;
        if(head==NULL) printf("\n无任何数据可以输出\n");
        else//非空链表
        for (; p1!=NULL; p1=p1->next)//结点不为空 执行循环体 否则继续指向下一个节点
        {
            if(p1->num==del_num)//找到指定结点
            {
                    if(p1==head) head=p1->next;//指定结点为表头
                    else  p2->next=p1->next;//表中
                    free(p1);
                    p1=p2;//结点被删除后 前一个结点p2作当前结点 p1指向当前结点
            }
        }
        printf("\n删除指定结点后的链表:\n");
        print(head);
    }
    void insert(Node *head)
    {
        Node *p1,*p2,*p3,s;
        printf("\n输入需要插入的结点数据:\n");
        scanf("%d%f",&s.num,&s.data);
        p3=(Node *)malloc(LEN);//给插入的结点开辟一个空间
        p3=&s;//地址赋给p3
        p1=head;
        if(head==NULL)//链表为空 p3作表头
        {
            head=p3;
            head->next=NULL;
        }
        else
        {
            for (; p3->num > p1->num&&p1->next!=NULL; p1=p1->next) p2=p1;//未找到插入位置 结点后移
            if(p3->num<=p1->num)//找到插入位置
            {
                if(p1==head) p3=head;//插入位置在表头
                else//表中
                {
                    p2->next=p3;//插入p1结点之前
                    p3->next=p1;
                }
            }
            else
            {
                p1->next=p3;//表尾
                p3->next=NULL;
            }
        }
        printf("\n插入指定结点后的链表:\n");
        print(head);
    }
    
    
    
    展开全文
  • C语言单向链表的建立(具体到代码实现)

    千次阅读 多人点赞 2019-04-18 23:43:49
    1.为什么要用到链表 数组作为存放同类数据集合,给我们在程序设计时带来很多方便,增加了灵活性。但数组也同样存在一些弊病。如数组大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中...

    1.为什么要用到链表

           数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性。但数组也同样存在一些弊病。如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中针对不同问题有时需要3 0个大小的数组,有时需要5 0个数组的大小,难于统一。我们只能够根据可能的最大需求来定义数组,常常会造成一定存储空间的浪费

           我们希望构造动态的数组,随时可以调整数组的大小,以满足不同问题的需要。链表就是我们需要的动态数组。它是在程序的执行过程中根据需要有数据存储就向系统要求申请存储空间,决不构成对存储区的浪费。

     

            链表是一种复杂的数据结构,其数据之间的相互关系使链表分成三种:单链表、循环链表、双向链表,目前暂时介绍一下单向链表的构成

    2.单向链表

            单链表有一个头节点head,指向链表在内存的首地址。 链表中的每一个节点的数据类型为结构体类型,节点有两个成员:整型成员(实际需要保存的数据)和指向下一个结构体类型节点的指针即下一个节点的地址(事实上,此单链表是用于存放整型数据的动态数组)。链表按此结构对各节点的访问需从链表的头找起,后续节点的地址由当前节点给出。无论在表中访问那一个节点, 都需要从链表的头开始,顺序向后查找。链表的尾节点由于无后续节点,其指针域为空,写作为NULL。

    上图还给出这样一层含义,链表中的各节点在内存的存储地址不是连续的,其各节点的地址是在需要时向系统申请分配的,系统根据内存的当前情况,既可以连续分配地址,也可以跳跃式分配地址。

    3.单向链表程序的实现    

    3.1 链表节点的数据结构定义

    typedef struct Node {
            int data;
            struct Node *pNext;
    } Node_list;

    在链表节点的定义中,除一个整型的成员外,成员pNext是指向与节点类型完全相同的指针。

    在链表节点的数据结构中,非常特殊的一点就是结构体内的指针域的数据类型使用了未定义成功的数据类型。这是在C中唯一规定可以先使用后定义的数据结构。

    3.2 链表的创建、输出步骤

    一、 单链表的创建过程有以下几步:

    1. 定义链表的数据结构;

    2. 创建一个空表;

    3. 利用malloc ( )函数向系统申请分配一个节点;

    4. 将新节点的指针成员赋值为空。若是空表,将新节点连接到表头;若是非空表,将新节点接到表尾;

    5. 判断一下是否有后续节点要接入链表,若有转到步骤3,否则结束;

    二、单链表的输出过程有以下几步:

    1. 找到表头;

    2. 若是非空表,输出节点的值成员,是空表则退出;

    3. 跟踪链表的增长,即找到下一个节点的地址;

    4. 转到2;

    3.3 程序代码例子:
    创建一个存放正整数单链表,输入0或小于0的数,结束创建链表,并打印出链表中的值,程序如下:

    #include <stdlib.h> /*含ma l l o c ( ) 的头文件*/
    #include <stdio.h>
    //①定义链表数据结构
    struct node 
    {
        int num;
        struct node *next;
    };
    main( )
    {
        struct node *creat(); 
        void print();
        struct node *head;
        head=NULL;    //②建一个空表
        head=creat(head);/*创建单链表*/
        print(head);/*打印单链表*/
    }
    /******************************************/ 
    struct node*creat(struct node *head)/*返回的是与节点相同类型的指针*/
    {
        struct node*p1,*p2;
        //③利用malloc ( )函数向系统申请分配一个节点
        p1=p2=(struct node*)malloc(sizeof(struct node));/*新节点*/
        printf("p1= %d\n",p1);
        scanf("%d",&p1->num);/*输入节点的值*/
        p1->next=NULL;/*将新节点的指针置为空*/
        while(p1->num>0)/*输入节点的数值大于0*/
        {
            //④将新节点的指针成员赋值为空。若是空表,将新节点连接到表头;若是非空表,将新节点接到表尾; 
            if(head==NULL)
                head=p1;/*空表,接入表头*/
            else 
                p2->next=p1;/*非空表,接到表尾*/
            p2=p1;
            p1=(struct node*)malloc(sizeof(struct node));/*下一个新节点*/
            printf("p2= %d\n",p2);
            scanf("%d",&p1->num);/*输入节点的值*/
            //⑤判断一下是否有后续节点要接入链表,若有转到3 ),否则结束; 
        }
        printf("p2->next=%d\n",p2->next);
        return head;/*返回链表的头指针*/
    }
    /*******************************************/
    void print(struct node*head)/*出以head为头的链表各节点的值*/
    {
        struct node *temp;
        temp=head;/*取得链表的头指针*/
        while(temp!=NULL)/*只要是非空表*/
        {
            printf("%6d",temp->num);/*输出链表节点的值*/
            temp=temp->next;/*跟踪链表增长*/
        }
    }

     

    展开全文
  • //编写一个C程序,功能是: //能接收用户从键盘输入一串正整数,然后建立动态链表; //(注:用户输入用"-1"表示结束;) //运行示例如下: //请输入: 1 2 3 4 5 6 7 8 9 -1 //结果是: 1->2->3->4->5->6->7->8->9->NULL
  • C语言链表操作简介

    2019-03-12 21:22:57
    (例子)将结构体定义为: ...空链表的建立(这里是指含有一个头结点的链表,创建空链表的函数代码如下) struct ST *CreatNullList() { struct ST *head; head=(struct ST *)malloc(sizeof...
  • C语言实现链表 对于链表的学习,其中用到了结构体、指针的知识。 链表是由一个个前后关联的、同类型的结构体变量组成的,用来存储数据。组成链表的结构体变量称为...空链表的建立 在这里插入代码片 struct ST *c...
  • 语言程序设计实验报告 实验八链表程序设计 实验目的 1掌握链表的概念定义和使用 2掌握链表中结点的建立插入删除方法 实验内容及步骤 1下列程序中子函数 insertup headnewp实现将一个 newp 所指新结点按升序插入到...
  • C语言代码链表的简单建立

    千次阅读 2014-03-21 16:36:07
    今天在网上看到链表的建立方法,之前不懂双向链表,循环链表怎么建立,这次一看,觉得方法都通用的,其实就是一种方法,所以把这些分享出来,希望对那些对链表有所惧怕的朋友有所帮助。 这部分链表的建立都是固定...
  • //单链表的建立,节点赋值,输出,插入,整表删除,指定节点位置删除 #include <stdio.h> #include <stdlib.h> #define N 15 struct student{ int date; struct student *next; }; //节点结构体 /**...
  • #include #include #define LEN sizeof(struct Student) int n = 0;//记录数据个数 ...代码如上,运行后输入第二个数据后显示“该内存不能为written”,用是CODEBLOCKS。卡在这一天了,求解答,万分感谢~
  • 本题要求实现一个函数,实现对单循环链表中奇数和偶数结点移动,要求奇数在前面,偶数在后面,且结点之间相对顺序不变。 1.建立结构体并定义宏变量。代码如下: 项目场景: 提示:这里简述项目相关背景: 例如:...
  • C语言链表的插入和删除、建立

    千次阅读 2006-09-08 16:59:00
    choiceTXT.h//执行要重复的代码,选择执行醒目并将结果付给choice#include"stdio.h"int choiceTXT(){ int choice; printf("/n/t请选择你要执行选项:"); printf("/n===============================/n/n"); ...
  • 代码如下:#include ...int main(){ /*—————————–程序描述——————————————– 题目:写出一个主函数,分别调用建立链表的函数create(),输出链表的函数print(), 删除链表结点的函数del(),
  • 该段代码调试了N次,.../*编写一个建立考生链表的函数 creat() .每个考生的数据包括准考证号(8字符) 姓名(16字符) 总分三个部分*/#include #include #include #define NULL 0struct student {char Num[9];char Name
  • C语言中静态链表的定义为:所有的结点都是在程序中定义的,不是临时开辟的,也不能用完后释放,这种链表称为“静态链表”。 代码如下: #include &lt;stdio.h&gt; struct Student{ int num; float ...
  • 预设代码建立了一个带有头结点单向链表。 编写一个函数,将链表中数值域数值为偶数节点移到链表尾部。 如果偶数节点多于一个,则连接到链表尾部节点先后顺序按原来顺序。 结构...
  • 代码 ...//链表的建立与输出 struct node//定义结点的类型 { int num, score; node* next; }; void main() { node* creat(int n);//函数原型声明 void print(node * h);//函数原型声明 node* head ...
  • 3.将上题中建立的链表进行反转,实现按年龄逆序 排列 4.题目:在上面实现链表中,给定一个年龄,迅速查 找和该学生年龄最接近学生姓名。 #include <stdio.h> #include <stdlib.h> #include <...
  • void displayList(List *head)//显示链表的所有值 { List *p; for(p=head->next;p;p=p->next) printf("%d ",p->e ); printf("\n"); } void destoryList(List *head)//释放一个链表 { List *p; while(head->...
  • C语言建立动态链表

    千次阅读 2018-10-08 22:20:15
    所谓建立动态链表是指在程序执行过程中从无到有地建立起一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相链关系。 代码如下: #include &lt;stdio.h&gt; #include &lt;stdib.h。 #...
  • 代码实现 void dumpDoubList(st_doubNode * head){ if(NULL == head){ return; } st_doubNode * p = NULL; printf("========= Dump Double List %p ===========\n\t", head); p = head; while (NULL !=...
  • 链表的概念2.链表的特点3.结点的组成单链表1.单链表概念2.单链表的描述3.C语言结构定义4.单链表的基本运算建立单链表1.头插法建表:2.尾插法建表:3.尾插法建表的改进算法查找运算1.按序号查找2.按值查找:插入运算1...
  • //请编写程序检查C语言原程序中下列符号是否匹配:/* */ ()[] {} //输入为C语言源程序 #include <iostream> #include<fstream> #include<string> using namespace std; typedef struct ...
  • 主要给大家介绍了关于C语言如何建立链表并实现增删查改相关资料,文中通过示例代码介绍非常详细,对大家学习或者使用C语言具有一定参考学习价值,需要朋友们下面来一起学习学习吧
  • c语言双向链表的实现

    2020-07-12 23:40:32
    实现了头插法建立双向链表,尾插法建立双向链表,节点的增删改查,链表的顺序遍历,逆序遍历等 代码如下 #include <stdio.h> #include <stdlib.h> #define TRUE 1; #define FALSE 0; typedef ...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 344
精华内容 137
关键字:

c语言链表的建立代码

c语言 订阅