C语言实现单链表创建、删除、查找、插入

C语言-数据结构-单链表初始化插入输出 【问题描述】 设有头结点单链表实现单链表初始化插入输出算法。 【输入形式】 第一行输入一个N(N大于等于1,小于1000),一个M(N大于等于1,小于1000); 第二行输入N个整数,以空格作为分隔,创建长度为N的单链表; 接着输入M组数据:pos和e,以空格分隔,分别表示插入位置插入元素。 【输出形式】 若插入成功,输出yes;若插入不成功,输出error。 最后输出单链表所有元素(以空格分隔)。 【样例输入1】 5 3 -4 5 2 7 0 2 100 ... 阅读详情

本文将详细的介绍C语言单链表的创建、删除、查找、插入以及输出功能

一、创建

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

typedef int ElemType;
/*结构体部分*/
typedef struct Node
{
    ElemType data;   //数值域
    struct Node *next;  //指针域
}Linklist;

Linklist *InitList(Linklist *L)    //初始化单链表
{
    L = (Linklist *) malloc(sizeof(Linklist));
    L->next = NULL;
    return L;
}

Linklist *CreateList(int n)
{
    /*通过输入n个数据,创建一个单链表*/
    int x,i;
    Linklist *L,*r,*p;
    L = InitList(L); //构造头结点
    r = L;
    printf("input %d value: ",n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&x);
        p = (Linklist *)malloc(sizeof(Linklist));
        p -> data = x;
        p -> next = NULL;
        r->next = p;
        r = r->next;    //指针r始终指向链表中末数据元素所在位置

    }
    return L;
}

二、插入

int InsItem1(Linklist *L,ElemType item,int x) /*给定的序号来插入*/
{
    int i = 1;
    Linklist *p,*t;
    p = L;
    t = (Linklist *)malloc(sizeof(Linklist));
    t ->data = item;
    if(L->next==NULL)
    {   /*若L为空表且要求将新结点插入到第0个位置*/
        if(x==1)
            {
                L->next=t;
                t->next=NULL;
                return 1;
            }
        /*若L为空表且要求将新结点插入到第非0个位置     ,则操作失败*/
        else
        {
            printf("wrong!\n");
            return 0;
        }
    }
    while(p->next!=NULL&&i<x)
    /*查找第i个节点*/
    {
        p = p->next;
        i++;
    }
    if(p->next==NULL&&i<x)
    /*在表中不存在插入位置i ,找不到,则插入操作失败*/
    {
        printf("The node %d is not exist\n",x);
        return 0;
    }
    else
    {
        t->next = p->next;
        p->next = t;
        return 1;
    }
}

int InsItem2(Linklist *L,ElemType item,ElemType k) /*插入给定值在链表中的位置*/
{
    Linklist *q,*p,*t;
    t = (Linklist *)malloc(sizeof(Linklist));
    t->data = item;
    if(L->next==NULL)
    {
        printf("The linklist is empty\n");
        return 0;
    }
    else
    {
        q = L;
        p = L->next;
        while(p->next!=NULL)/*查找值为k的结点*/
        {
            if(p->data!=k)
            {
                q = p;
                p = p->next;
            }
            else
                break;
        }
        if(p==NULL)/*如p= =NULL,则没有值为k的结点,插入操作失败*/
        {
            printf("The node %d is not exist\n",k);
            return 0;
        }
        else
        {
            q->next = t;
            t->next = p;
            return 1;
        }
    }
}

三、删除

int DelItem(Linklist *L,int x)
//在单链表中删除数据元素
{
    int i = 1;
    Linklist *p,*q;
    p = L;
    if(L->next==NULL) /*L为空表,无结点可删除*/
    {
        printf("The linklist is empty!\n");
        return 0;
    }
    while(p->next!=NULL&&i<x)
    {
        p = p->next;
        i++;
    }
    if(p->next==NULL)
        /*若没有第i个结点,则删除操作失败*/
    {
        printf("The node %d is not exist\n",x);
        return 0;
    }
    else
    {
        q = p->next;
        p->next = p->next->next;
        free(q);
        return 1;
    }

}

四、查找

int LocItem(Linklist *L,ElemType x)
//查找给定值的结点位置
{
    Linklist *p,*q,*r;
    int i = 1;
    if(L->next==NULL)
    {
        printf("The linklist is empty\n");
        return 0;
    }
    else
    {
        p = L->next;
        while(p!=NULL)
        {
            if(p->data!=x)
            {
                i++;
                p = p->next;
            }
            else
                break;
        }
        if(p==NULL)
        /*如p= =NULL,则没有值为item的结点,删除操作失败*/
        {
            printf("The node %d is not exist\n",x);
            return 0;
        }
        /*若找到该节点返回该节点的位置*/
        else
            return i;
    }
}

五、输出

void output(Linklist *L) //输出
{
    Linklist *p;
    p = L->next;
    printf("output element: \n");
    for(;p!=NULL;p=p->next)
    {
        printf(" %d ",p->data);
    }
    printf("\n");
}

六、主函数部分

int main()
{
    ElemType x = 5;
    Linklist *L;
    L = CreateList(x);
    output(L);
    InsItem1(L,3,2);
    output(L);
    InsItem1(L,3,4);
    output(L);
    DelItem(L,3);
    output(L);
    printf("3的位置是: %d",LocItem(L,3));
}
c语言单链表实现(一) 创建插入删除查找 #include #include #include #define NULL 0 #define LEN sizeof(struct Student) using namespace std; typedef struct Student { int length; int num; struct Student *next; }Student; typedef Student *Lin 阅读详情

相关推荐

C语言单链表实现初始化创建、增、删、查等基本操作(详细)

C语言单链表实现初始化创建、增、删、查等基本操作 #include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef int ElemType; //定义单链表结构 typedef struct Node { ElemType data;//数据域 struct Node *next;//指针域 } LinkList; //初始化 LinkList *initList(LinkList *

Qian_Qian_IT的博客 7万+

C语言实现单链表创建及基本操作

C语言实现单链表创建及基本操作 往期文章:C语言实现顺序表的创建及基本操作 这次主要是分享一下数据结构中单链表创建及基本操作,这一部分也是属于比较基础的内容。但是越基础的东西我们越要投入精力去学习,不能眼高手低。我在编写这一部分的内容时就出现了许多错误,这也算是一次查漏补缺的博客吧,下面我们正式开始。 单链表的结构定义 首先我们先来看一下常规定义单链表,一般情况下会包含数据域和指针域。例...

weixin_43954729的博客 4万+

吹气压力传感器US6310 US6330调试

更换压力传感器, 从US6310 更换为US6330。 6310有一个准备好引脚,AD转换完成后会给MCU一个脉冲 而6330就没有这个功能,6330这个引脚是用来选择SPI还是I2C接口的。(6330没有复位引脚,内部有POR功能) 因此在实现上是有根本区别的, 其它方面使用的命令也不一样, 6310 A8 A9两条命令,一个命令模块醒来,一个命令模块休眠, 6330只有一条命令AA, 命令模块开始转换。 针对这2个模块作为2种处理方法, 1. 6310,可以设置一...

明天乌儿会歌唱 1981

数据结构——单链表初始化、建立、插入删除

目录 1、单链表初始化 2、建立单链表 3、单链表插入运算 4、单链表删除运算 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可连续、也可不连续)。 链表优点 链表缺点 1、不要求占用连续的存储空间,可动态进行分配。 2、插入删除操作效率高,不需要移动元素。 1、不能随意访问任一元素。...

TSY_1222的博客 1万+

(车)定义单链表编写单链表初始化函数插入函数(在某个位置插入一个元素)、查找函数(按查找)、删除函数删除单链表中某个位置上的元素)、输出函数显示单链表每个元素)、主函数

可供操作 printf("\n输入你要选择的命令\n"); printf("1、展示一切信息\n"); printf("2、插入\n"); printf("3、销毁表\n"); printf("4、初始化表\n"); printf("5、查找信息\n"); printf("6、删除信息\n"); printf("7、退出\n"); 代码使用了后插入法 #define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include "s.

王陈锋的博客 1517

C/C++ 单链表创建插入删除查找实现(简单 - 完整代码)

单链表的增删改查实现 温馨提示:阅读本文需要15-25分钟 单链表创建第一步也是最重要的一步就是要创建结构体,怎样创建结构体好理解呢?以下的定义结构体的方式是我看过那么多别人的代码以来让我感觉最容易看懂的,对新手也是很友好的,反正我创建新结点或者是传参只需要写一种形式struct List* ptr = ...; 就可以了。 struct List { int val;...

SanpTap的博客 3万+

单链表创建插入删除查找、遍历等功能(C语言实现

下面展示一些 内联代码片。 //用到的头文件、结构体 #include <stdio.h> #include <stdlib.h> typedef int elemtype; typedef struct node { elemtype data; struct node *next; }LinkList; int i;//记录链表节点的个数(除头结点) //头插法创建链表 LinkList *creat_LinkListF() { i = 0;

weixin_46626833的博客 4909

单链表创建删除查找插入之C语言实现

本文将详细的介绍C语言单链表创建删除查找插入以及输出功能 一、创建 #include<stdio.h> #include<stdlib.h> typedef int ElemType; /*结构体部分*/ typedef struct Node { ElemType data; //数域 struct Nod...

dashe5547的博客 1497

C语言数据结构创建单链表插入操作,删除操作,存取操作,查找操作的代码实现

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素一个单链表结点由以下两个域构成。数据域指针域datanext其中数据域data存放该结点的数据域的,指针域存放该结点的后继结点的地址信息。关于单链表的主要操作有插入操作,删除操作,存取操作,查找操作等。如果想要去跑下面代码的实现,请先加上头文件和结构体声明以及全局变量,这里也附带了一个测试用的主函数

LLF_ABC的博客 2571

链表建立插入删除c语言编程,c语言单链表实现(一) 创建插入删除查找...

#include#include#include#define NULL 0#define LEN sizeof(struct Student)using namespace std;typedef struct Student{int length;int num;struct Student *next;}Student;typedef Student *Linklist; //头指针v...

weixin_42504230的博客 1081

数据结构——单链表创建插入删除,求长度,查找元素。(c语言实现

数据结构——单链表创建插入删除,求长度,查找元素。(c语言实现

batcat560的博客 1437

c语言单链表结点删除程序,C语言实现带头结点的链表的创建查找插入删除操作...

#include #include typedef struct node{int data;struct node* next;// 这个地方注意结构体变量的定义规则} Node, *PNode;Node* createLinklist(int length){int i = 0;PNode pHeader = NULL;PNode pTail = NULL;PNode pTemp = NULL...

weixin_35632257的博客 338

线性表的基本操作及应用(单链表创建插入删除查找显示

1.实现单链表创建;2.实现单链表插入;3.实现单链表删除;4.实现单链表查找;5。实现单链表显示 #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 typedef int Status; typedef float ElemType; //线性表的单链表存储结构 type...

糖哲睿的博客 5333

【数据结构】单链表的增删查改(C语言实现

单链表的增删查改操作(C语言实现)。

在平淡的日子里寻找存在的价值 5220

数据结构【完整代码】之(C语言实现【顺序存储表、单链表创建插入删除查找输出、求长度、合并的实现与测试)

本文包含两个文件的代码和一张测试效果图: List.h文件:存储信息:存放函数、结构体、链表、变量名等 achieve.cpp文件:用于测试 效果图:最下方 List.h文件: #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 typedef int ElemType; typedef int Stat

Zhou_LC的博客 1206

单链表_创建链表,插入删除查找(C语言

实现单链表的基本操作: #include<stdio.h> #include<malloc.h> //动态存储分配头文件 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int ElemType; typedef struct LNode{ int data; LNode *n...

carakia的博客 3668

线性表单链表的基本操作:添加、插入删除查找(非常全面,C语言实现

​链表的创建插入(头插、尾插);删除(头删、尾删、指点元素删除);查找元素;注销链表 ​

好作息,好心态,多锻炼,多学点,多钻研 883

c语言链表的遍历 释放 删除,单链表初始化查找删除插入、释放

/*Get1、我这里的单独创建一个结构体 List来保存整个链表的信息和一般的参考书上可能不一样2、实际的单链表由 List里面的 头结点Head进行连接。3、头结点有数据域和指针域 ,数据域可以任意替换4、本程序实现了①、单链表创建(使用尾插法,符合先进先出的生活逻辑。头插法也可以)②、单链表删除(释放所有节点,head=NULL, 链表长度为0);③、节点的插入删除查找(获取)5、单...

weixin_39630813的博客 806

【链表】单链表的基本操作详解(C语言)

本文是单链表的C语言实现方法,包括创建单链表结点、创建单链表显示链表的数据、获取链表长度、在链表指定位置插入结点、删除指定位置的结点、查找链表中指定的数据、修改链表中指定位置结点的、修改链表中指定数据的

HongKnight的博客 4万+
上一篇: 单例模式实现方法之懒汉式、饿汉式
下一篇: 学Redis这篇就够了
AbbasChen
博客等级 码龄10年 43粉丝 3原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值