单向链表总结

作者: cjs2019 | 来源:发表于2019-03-11 08:20 被阅读11次

// 2019-03-11

长期置顶:欢迎大家挑错(友好地)(以及不友好地)……大家请直接在评论区发言(喷),请不要私信我,作业好多…… 还有是请注意公告内容,注意学术诚信,严格遵守我国法律,……(略去10^100字)

—————————————我是分割线—————————————

我这写的是啥……

我的 文件/代码 去哪里了……

我的作业去哪里……

能给我个和……聊天的时间吗……太真实了!!

竟然因为含有meizi这个单词,而不能发布更新,太真实了!!

a w s l

—————————————我是分割线—————————————

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INPUT_STOP_SIGNAL (-1)

struct ListNode{
    long long data;
    ListNode* next=NULL;
};

void malloc_error_report(void){//malloc错误报告;
    printf("Memory allocation failed!\nPlease check it again to find the reason which may be too much data input!\n");
}

void other_error_report(void){//其他错误报告;
    printf("There may be an error in the code. Please check it again and try to debug it!\nGood luck to you!\n");
}

// FIFO 队列 追加方式创建链表————将新加入元素插到链表尾部;
void create_one_listNode(ListNode** headPtr,ListNode** presentPtr,long long num){//创建一个节点;(对头指针和尾指针采用传引用方式);
    ListNode *ptr=NULL;//声明变量,用于进行新节点的申请;
    if ((*headPtr)==NULL){//如果头指针指向空类型,那么,之前必是空表;
        ptr=(ListNode*)malloc(sizeof(ListNode));//申请,并用临时指针ptr指向;
        if (ptr==NULL){ //如果申请失败,打印错误报告;
            malloc_error_report();
        }
        else{ //否则,即如果申请成功;
            (*headPtr)=ptr; //将该指针指向位置赋值给 头指针;
            (*headPtr)->data=num; //将数据存入 头部节点的数据域中;
            (*presentPtr)=(*headPtr);//现在的List不在是empty List,所以将尾部指针指向最后一个节点(由于只有一个节点,所以也就是头节点);
        }
    }
    else{
        ptr=(ListNode*)malloc(sizeof(ListNode)); //申请,并用临时指针ptr指向;
        if (ptr==NULL){  //如果申请失败,打印错误报告;
            malloc_error_report();
        }
        else{ //否则,即如果申请成功;
            (*presentPtr)->next=ptr; //将下一个节点的实际位置赋给presentPtr的指针域;
            (*presentPtr)=(*presentPtr)->next; //将尾指针指向下一个节点;
            (*presentPtr)->data=num; //将数据存入 最后一个节点的 数据域中;
        }
    }
}


// LIFO 插入方式创建链表————将新加入元素插到链表头部;
void create_one_listNode_LIFO(ListNode** headPtr,ListNode** lastPtr,long long num){//创建一个节点;(对头指针和尾指针采用传引用方式);
    ListNode *ptr=NULL;//声明变量,用于进行新节点的申请;
    if ((*lastPtr)==NULL){//如果尾部指针指向空类型,那么,之前必是空表;
        ptr=(ListNode*)malloc(sizeof(ListNode));//申请,并用临时指针ptr指向;
        if (ptr==NULL){ //如果申请失败,打印错误报告;
            malloc_error_report();
        }
        else{ //否则,即如果申请成功;
            *lastPtr=ptr;
            (*lastPtr)->data=num;
            (*headPtr)=(*lastPtr);
        }
    }
    else{
        ptr=(ListNode*)malloc(sizeof(ListNode)); //申请,并用临时指针ptr指向;
        if (ptr==NULL){  //如果申请失败,打印错误报告;
            malloc_error_report();
        }
        else{ //否则,即如果申请成功;
            ptr->next=(*headPtr);
            (*headPtr)=ptr;
            (*headPtr)->data=num;
        }
    }
}

ListNode* input_data(ListNode* headPtr){//处理输入数据,并将其存入一个链表中;
    ListNode* ptr=NULL,*presentPtr=NULL;
    long long num;
    scanf("%lld",&num);//逐个输入数据;
    while (num != INPUT_STOP_SIGNAL){//如果输入数据不为-1,就创建一个新的节点,然后将数据储存进去;
        create_one_listNode_LIFO(&headPtr,&presentPtr,num);//创建一个新的节点,并储存数据;
        scanf("%lld",&num);//读入下一个数据;
    }
    return headPtr;//返回链表的头指针;
}

void show_one_list(ListNode* headPtr){
    ListNode *ptr=headPtr;
    while(ptr != NULL){
        printf("%lld ",ptr->data);
        ptr=ptr->next;
    }
    printf("\n");
}

int main(){
    printf("Please input a list(end by -1):");
    ListNode *headPtr=NULL;//相当于创建一个空表(只有头指针,没有尾指针);
    headPtr=input_data(headPtr);//处理输入信息,假设处理的输入信息都是以「标准输入」实现的;
    
    printf("The list you have just inputted is:");
    show_one_list(headPtr); // If you wanna take a look at it…… o(^_^)o ……


    return 0;
}

相关文章

  • 8.单向链表SingleLinkList

    目录:1.单向链表的定义2.单向链表的图解3.单向链表定义操作4.单向链表的实现 1.单向链表的定义 2.单向链表...

  • 单向链表总结

    // 2019-03-11 长期置顶:欢迎大家挑错(友好地)(以及不友好地)……大家请直接在评论区发言(喷),请不...

  • 线性表-单向循环链表

    为了方便,本文介绍的单向循环链表不包含头节点 单向循环链表内容 单向循环链表的的定义 单向循环链表的创建 单向循环...

  • 10.单向循环链表SingleCycleLinkList

    目录:1.单向循环链表的定义2.单向循环链表的图解3.单向循环链表定义操作4.单向循环链表的实现 1.单向循环链表...

  • 数据结构与算法——线性表3

    线性表——单向循环链表 3、单向循环链表 在单向链表的基础上,单向链表的尾结点的Next指向链表的头部,就是为循环...

  • 链表相关

    总结一下链表相关的操作 单链表节点的定义 实现单向链表的反向 删除单链表的所有节点

  • 04单向循环链表实现总结

    一、说说什么是单向循环链表? 人狠话不多. 上图. 单向循环链表就是这个样子!单向循环链表.png 与单向链表区别...

  • 数据结构基础--单向循环链表

    单向循环链表 单向循环链表是可循环的单链表,它与单链表的区别在于单向链表的最后一个元素的指针域为空,而单向循环链表...

  • 2019-12-04 Java-LinkedList源码解读

    @TOC 1、链表数据结构 链表分为单向链表和双向链表,他们的区别在于,单向链表只能单向寻址,而双向链表可以双向寻...

  • 数据结构与算法之循环链表(3.4)

    目录 单向循环链表双向循环链表约瑟夫问题如何发挥循环链表的最大威力? 一 单向循环链表 单向循环链表 - 只有一个...

网友评论

    本文标题:单向链表总结

    本文链接:https://www.haomeiwen.com/subject/mjampqtx.html