zoukankan      html  css  js  c++  java
  • 链表的增删改查

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

    //先定义链表里面的元素。
    typedef struct node{
    int data;
    struct node *next;
    }MyNode;

    //定义整个链表。
    typedef struct link{
    MyNode *head;//把head指向的元素定为第一个元素。
    }MyLink;


    int isEmpty_to_MyLink(MyLink *myLink);//判断链表是否为空。
    int push_to_MyLinkInHead(MyLink *myLink,int m);//向链表头添加元素值为m的元素。
    int insert_to_MyLink(MyLink *myLink,MyNode *myNode,int m);//向链表的myNode后面添加一个元素值为m的值。
    int remove_to_MyLinkByValue(MyLink *myLink,int m);//删除链表中值为m元素。
    int length_to_MyLink(MyLink *myLink);//判断链表的长度。
    int isExistLoop_MyLink(MyLink *myLink);//判断链表是否有环。
    void printMyLink(MyLink *myLink);//输出链表。



    int isEmpty_to_MyLink(MyLink *myLink){
    if (myLink->head==NULL) {
    return 1;
    }
    return 0;
    }

    int push_to_MyLinkInHead(MyLink *myLink,int m){
    MyNode *tempNode=malloc(sizeof(MyNode));
    tempNode->data=m;
    tempNode->next=myLink->head;
    myLink->head=tempNode;
    free(tempNode);
    return 1;
    }

    int insert_to_MyLink(MyLink *myLink,MyNode *myNode,int m){
    MyNode *tempNode=malloc(sizeof(MyNode));
    tempNode->data=m;
    tempNode->next=myNode->next;
    myNode->next=tempNode;
    free(tempNode);
    return 1;
    }

    int remove_to_MyLinkByValue(MyLink *myLink,int m){
    if (isEmpty_to_MyLink(myLink)) {
    return 0;
    }
    int flag=0;
    while ((myLink->head)&&(myLink->head->next)) {
    if (myLink->head->next->data==m) {
    myLink->head=myLink->head->next;
    flag++;
    }
    }
    if ((myLink->head)&&(myLink->head->data==m)) {
    myLink->head=myLink->head->next;
    flag++;
    }
    if (flag>0) {
    return 1;
    }
    return 0;
    }

    int length_to_MyLink(MyLink *myLink){
    int myLength=0;
    while (myLink->head) {
    myLink->head=myLink->head->next;
    myLength++;
    }

    return myLength;
    }

    int isExistLoop_MyLink(MyLink *myLink){
    MyNode *tempNodeA=malloc(sizeof(MyNode));
    MyNode *tempNodeB=malloc(sizeof(MyNode));
    tempNodeA=myLink->head;
    tempNodeB=myLink->head;
    while ((tempNodeB) && (tempNodeB->next)) {
    tempNodeA=tempNodeA->next;
    tempNodeB=tempNodeB->next->next;
    if (tempNodeA==tempNodeB) {
    return 1;
    }
    }
    free(tempNodeA);
    free(tempNodeB);
    return 0;
    }

    void printMyLink(MyLink *myLink){
    if (isEmpty_to_MyLink(myLink)) {
    printf("链表为空\n");
    return;
    }
    MyNode *myNode = myLink->head;
    while (myNode) {
    printf("%d , ",myNode->data);
    myNode=myNode->next;
    }
    }




    int main(int argc, const char * argv[])
    {

    //创建自己的链表。
    MyLink *myLink = malloc(sizeof(MyLink));
    myLink->head = NULL;

    //创建自己链表中的元素。
    MyNode *myNode = malloc(sizeof(MyNode));
    myNode->next=NULL;
    myNode->data=0;

    //判断链表是否为空。
    if (isEmpty_to_MyLink(myLink)) {
    printf("空链表\n");
    }
    else{
    printf("不是空链表\n");
    }
    //求得链表的长度。
    printf("链表的长度为 %d\n",length_to_MyLink(myLink));

    //向链表中指定位置插入一个元素。
    int temp = 10;

    //插入到链表的头部。
    if (push_to_MyLinkInHead(myLink, temp)) {
    printf("添加成功\n");
    }
    else{
    printf("添加失败\n");
    }

    //求得链表的长度。
    printf("链表的长度为 %d\n",length_to_MyLink(myLink));

    printMyLink(myLink);
    //删除某个值
    if (remove_to_MyLinkByValue(myLink, temp)) {
    printf("删除成功\n");
    }
    else{
    printf("删除失败\n");
    }

    //判断链表是否有环。
    if (isExistLoop_MyLink(myLink)) {
    printf("存在环\n");
    }
    else{
    printf("不存在环\n");
    }

    printMyLink(myLink);

    //求得链表的长度。
    printf("链表的长度为 %d\n",length_to_MyLink(myLink));






    free(myLink);
    free(myNode);
    return 0;
    }

  • 相关阅读:
    [置顶] Android中使用sqlite3操作SQLite
    我们不应歧视任何语言,她们都是萌娘!(有图有真相)
    一牛人博客导航
    机器学习&数据挖掘笔记_14(GMM-HMM语音识别简单理解)
    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
    机器学习、深度学习、数据挖掘各种资源整理
    MLP 之手写数字识别
    卷积神经网络CNN 手写数字识别
    支持向量机SVM 简要推导过程
    23种设计模式
  • 原文地址:https://www.cnblogs.com/bjanzhuo/p/3576090.html
Copyright © 2011-2022 走看看