• 单链表的基本操作-单链表的创建、插入、删除结点等


    序言

    本文主要包括:

    (1)单链表的创建

    (2)创建结点

    (3)打印结点

    (4)链表的插入【头插法】

    (5)链表的删除【指定位置删除】

    适合新手初步认识学习单链表的基本操作

    一、代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include<string.h>
    //结构体----结点由数据域+指针域构成 
    struct Node {
        int data;//数据域 
        struct Node* next;//指针域 
    };
    //创建链表(表头)
    struct Node* createList(){
        struct Node* headNode=(struct Node*)malloc(sizeof(struct Node));
        //headNode 成为了结构体变量
        //变量使用前必须初始化 
        //headNode->data=1;//一般不初始化数据 
        headNode->next=NULL;
        return headNode;      
    }
    //创建结点
    struct Node* createNode(int data){
        struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
        //初始化新结点 
        newNode->data=data;
        newNode->next=NULL;
        return newNode;
     } 
     //打印结点(遍历结点) 
     void printList(struct Node* headNode  ) {
         struct Node* pMove=headNode->next;//打印指针指向头结点下一个结点 
         while(pMove) {
             printf("%d	",pMove->data);
             pMove=pMove->next;    
         }        
         printf("
    ");
     }
    
    //链表的插入:插入结点---插入那个链表、插入结点的数据是多少 
      void insertNodeByHead(struct Node* headNode,int data){
      //1、创建一个插入结点
      struct Node* insertNode=createNode(data); //调用createNode方法创建一个新的结点 
        insertNode->next=headNode->next;
        headNode->next=insertNode;
    } 
    //链表的删除:指定的位置删除 ---删除那个链表、删除的数据是多少 
    void deleteNodeByAppoin(struct Node* headNode,int posData) {
        struct Node* posNode=headNode->next;
        struct Node* posNodeFront=headNode;
        if(posNode==NULL)
            printf("链表为空!"); 
        else{
            while(posNode->data!=posData){
                posNodeFront=posNode;
                posNode=posNodeFront->next;
                if(posNode==NULL){
                    printf("无法找到指定位置");
                    return;
                }            
            }
            posNodeFront->next=posNode->next;
            free(posNode);
        }    
    } 
    int main() {
        struct Node* list=createList();//创建一个名为list的链表 
        printf("插入前链表中的数据:
    "); 
        printList(list);
        printf("插入后链表中的数据:
    "); 
        insertNodeByHead(list,3);//向链表list插入数据---3 
        insertNodeByHead(list,2);//向链表list插入数据---2 
        insertNodeByHead(list,1);//向链表list插入数据---1 
        printList(list);         //打印链表 list 
        printf("删除后链表中的数据:
    "); 
        deleteNodeByAppoin(list,2);//删除链表中数据为2的 
        printList(list);
        system("pause");
        return 0; 
    }

    二、运行结果:

  • 相关阅读:
    数字电路与系统-组合逻辑电路逻辑冒险
    数字电路与系统-组合逻辑电路竞争与冒险
    数字电路与系统-组合逻辑电路理论分析(视频)
    数字电路与系统-逻辑函数最后的总结
    微信小程序--成语猜猜看
    微信小程序开发中如何实现侧边栏的滑动效果?
    强力推荐微信小程序之简易计算器,很适合小白程序员
    【微信小程序】自定义模态框实例
    编程微刊第四期文章汇总(2018.4)
    ajax实现简单的点击左侧菜单,右侧加载不同网页
  • 原文地址:https://www.cnblogs.com/it1997/p/12054157.html
Copyright © 2020-2023  润新知