首页 > 其他分享 >C语言数据结构链表(无头结点)功能实现(增,删,改,查)

C语言数据结构链表(无头结点)功能实现(增,删,改,查)

时间:2024-03-18 20:32:20浏览次数:12  
标签:结点 NULL return LNode int next 链表 printf C语言

#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
    int  data;
    struct    LNode * next;
}LNode,*LinkList;
 bool InitList(LinkList &L){
     L=NULL;
     return 0;
 }
bool insert(LinkList &L,int i,int x){                    //插入元素 
    if(i<1){
        printf("插入不合法\n");
        return 0; 
    }
    if(i==1){
        LNode *s=(LNode *)malloc(sizeof(LNode));
        s->data=x;
        s->next=L;
        L=s;
        printf("插入成功\n"); 
        return true;
    
    }
    LNode *p=L;
    int j=1;
while(p!=NULL&&j<i-1){
    p=p->next;
    j++;
}
if(p==NULL){
    printf("插入不合法\n");
    return 0; 
}
LNode *s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=p->next;
p->next=s;
printf("插入成功\n"); 
return true; 
}

void look(LinkList &L)                        //遍历链表 
{
    int j=1;
    LNode* p=L;
    while(p!=NULL){
        printf("第%d个元素的值为%d\n",j,p->data);
        p=p->next;
        
            j++;
    
    
    }
}
bool Delete(LinkList &L,int i)                  //按照位序删除元素 
{
    if(i<1){
        printf("位序不合法\n");
        return 0; 
    }
    LNode *p=L;
    int j=1;
    while(p->next!=NULL&&j<i-1)
    p=p->next;
    j++;

if(p==NULL){
printf("位序不合法\n"); 
return false; 
}
printf("删除的元素为%d\n",p->next->data);
p->next=p->next->next;


return true;
}
void length(LinkList &L)                //查看链表元素的个数 
{LNode* p=L;
int j=0;
while(p!=0){
    j++;
    p=p->next;
}
    printf("长度为%d\n",j);
}

bool alter(LinkList &L,int i,int s){                  //根据位序改变值 
        if(i<1){
        printf("位序不合法\n");
        return 0; 
    }
    LNode *p=L;
    int j=1;
    while(p!=NULL&&j<i){
        p=p->next;
        j++;

    }
    if(p==NULL)
    {
        printf("位序不合法\n");
        return 0;
    }
    p->data=s;
    printf("更改成功\n");
    return true;
}
bool seek(LinkList &L,int i){                                        //根据位序查元素的值 
        if(i<1){
        printf("位序不合法\n");
        return 0; 
    }
        LNode *p=L;
    int j=1;
    while(p!=NULL&&j<i){
        p=p->next;
        j++;

    }
    if(p==NULL)
    {
        printf("位序不合法\n");
        return 0;
    }
    printf("第%d个元素值为%d",i,p->data);
    
}

int main(){
    LinkList L;
    InitList (L);
    insert (L,1,1);
    insert (L,2,2);
    insert (L,3,3);
    insert (L,4,4);
    length(L);
    look (L);
    Delete(L,2);
        look (L);
        alter(L,1,9);
            look (L);
            seek(L,1) ;
    
    return 0;

标签:结点,NULL,return,LNode,int,next,链表,printf,C语言
From: https://blog.csdn.net/qq_63152835/article/details/136820537

相关文章

  • 深入C语言指针,使代码更加灵活(三)
    一、函数指针1.1函数的地址在讲解函数指针变量之前,我们先思考一下什么是函数指针变量,我们可以同数组指针变量进行类比:数组指针—是指针—是存放指向数组的指针,是存放数组地址的指针;函数指针—是指针—是存放指向函数的指针,是存放函数地址的指针;数组是有地址的,那么函数......
  • L2-022 重排链表
    这道题真的烦,输出想半天。反正就是要区分奇偶,才能知道那个结点最后要打印出-1.我看网上遇到的都是测试点3的问题,不过我有问题的是测试点1,前三个出问题就是节点数奇偶的问题。#include<bits/stdc++.h>usingnamespacestd;map<int,pair<int,int>>mp;intmain(){ ints......
  • 用C语言实现二分查找
    //二分查找,前提必须是有序#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){ intarr[]={1,2,3,4,5,6,7,8,9,10}; intsz=sizeof(arr)/sizeof(arr[0]);//求数组长度 intk=7;//要查找的数 intleft=0; intright=sz-1; intmid=0; i......
  • 学习笔记——C语言基本概念&运算符——(2)
    目录一、运算符1.1赋值运算符1.2算数运算符 1.3关系运算符1.5位运算符1.6 自增自减运算符1.7  复合运算符1.8逗号运算符1.9 三目运算符1.10 sizeof运算符附录:运算符优先性表一、运算符1>.按照操作数目分类:单目运算符,双目运算符,三目运算符。2>......
  • C语言随记————简单算法
    1.问题:如何在C语言中实现一个简单的线性查找算法? 答案:线性查找算法可以通过遍历数组的每个元素,逐一比较来查找目标值。以下是一个简单的实现示例:intlinearSearch(intarr[],intn,intx){for(inti=0;i<n;i++){if(arr[i]==x)re......
  • C语言动态链表练习(简单易懂)
    学习目标:初步认识动态链表,并会最基础的应用。题目内容:写个程序,输入a,b,c如果a>b,a=a➖b    b>c,b=b➖c    c>a,c=c➖a要求:开始时输入k➕1行数,第一行为k,代表数的组数,下面每一行为一个组,每组四个数,前三个为a,b,c,最后一个为这组数进行上述计算的次数题目特点分析:开始......
  • 使用vscode编辑c语言
    在VisualStudioCode(VSCode)中配置C语言环境步骤指南:一,前期准备(安装扩展,软件包)安装C/C++扩展打开VSCode。点击左侧边栏的扩展按钮(或使用快捷键Ctrl+Shift+X)。在搜索框中输入C/C++。从结果中找到Microsoft的C/C++扩展并点击“安装”。安装MinGW或......
  • 反转链表
    描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围:0≤n≤1000要求:空间复杂度O(1),时间复杂度O(n),如当输入链表{1,2,3}时,经反转,原链表变为{3,2,1},所以对应输出为{3,2,1}.以上转换过程如下图所示:实......
  • C语言指针完整总结!!!
    1.指针介绍1.简介:C语⾔中给地址起了新的名字叫:指针。一个内存单元是一字节内存单元的编号==地址==指针在x86的环境中,一共有32根地址总线,即32个比特位。一个字节有八个比特位,而⼀个比特位可以存储⼀个2进制的位1或者0,因此32根地址线,就能表示2^32种含义,每⼀种含义都......
  • #c语言程序设计————实验报告
    实验项目名称:实验一熟悉C语言运行环境实验项目类型:验证性实验日期:2023年3月14日一、实验目的下载安装Devc6.0程序。了解在该系统上如何进行编辑、编译、连接和运行一个C程序。通过运行简单的C程序了解C程序的特点。二、实验硬、软件环境Windows计算机、Devc6.0三、......