zoukankan      html  css  js  c++  java
  • 单向链表

      明天要考四级,所以其实想写很多东西但是也没有时间细细写了,感觉写博客不只是写那么简单,他需要人安静的思考。所以就先写一个单向链表的代码吧。这是我第一次使用链表这种数据结构,所以加了很多注释。注释的风格十分的小白,不要介意啊哈。

      想通过这些代码实现一个单向链表的加入数据,搜索数据以及删除数据的功能。

    /*这个程序希望可以实现一些单向链表的常用操作*/
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct List{
        int value;
        struct list *next;
    } Date;
    typedef struct List2{
        Date* head;                 /*head指向Date链表的头部*/
        Date* tail;                 /*tail指向Date链表的尾部*/
    } Date2 ;
    /*这个函数负责添加数据到链表中*/
    void add(int n,Date2* plist)
    {
        Date *p=(Date *)malloc(sizeof(Date));
        p->value=n;
        p->next=NULL;
        Date *q;
        if(plist->head==NULL)        /*当链表为空的时候*/
        {
            plist->head=p;
            plist->tail=p;           /*此时该链表的头和尾均为p指的内容*/
        }
        else
        {
            q=plist->tail;
            plist->tail=p;
            q->next=plist->tail;
        }
    }
    /*遍历链表输出数据*/
    void print(Date2 *plist)
    {
        Date *p;
        for(p=plist->head;p;p=p->next)
        {
            printf("%d	",p->value);
        }
        printf("
    ");
    }
    /*查找数据,如果存在返回1,否则返回0*/
    int find(int number,Date2* plist)
    {
        Date *p;
        int flag=0;
        for(p=plist->head;p;p=p->next)
        {
            if(p->value==number)
            {
                flag=1;
                break;
            }
        }
        return flag;
    }
    /*这个函数用来删除数据,如果没有这个数据则返回0*/
    void Delete(int number2,Date2* plist)
    {
        Date *p,*q;       /*p和q这两个指针一前一后*/
        int flag=0;
        for(p=NULL,q=plist->head;q;p=q,q=q->next)
        {
            if(q->value==number2)
            {
                if(p){
                    p->next=q->next;
                } else{
                    plist->head=q->next;
                }
                free(q);
                flag=1;
                break;
            }
        }
        if(!flag)
            printf("没找到该数据。
    ");
        else
            printf("已删除。
    ");
    
    }
    void Free(Date2 *plist)
    {
        Date*p,*q=NULL;
        for(p=plist->head;p;p=q)
        {
            q=p->next;
            free(p);
        }
    }
    int main()
    {
        Date2 list; /*定义了一个指向Date2的指针list*/
        list.head=list.tail=NULL;
        int n,number,ret,number2;
        do
        {
            printf("
    请输入下一个数:
    ");
            scanf("%d",&n);
            if(n!=-1)              /*当读取到-1时结束链表的输入*/
            {
                add(n,&list);      /*把n添加到链表的末尾*/
            }
        } while(n!=-1);
        print(&list);
        printf("输入你想查找的数字:
    ");
        scanf("%d",&number);
        ret=find(number,&list);
        printf("%d
    ",ret);
        printf("请输入你想删除的数字:
    ");
        scanf("%d",&number2);
        Delete(number2,&list);
        print(&list);
        Free(&list);
        return 0;
    }

       PS:希望明天能考好,基本上算是裸考了吧….不过把翁恺的课现在出的部分已经刷完了。近期的任务:明天下午争取把上篇字符串中的两个小坑填了。写一个双向链表,写几道OJ题,如果可能还是希望把翁恺老师最后一些课堂笔记(他关于全局变量和宏说的有些地方挺好的)写了。恩这周,没法刷Coursera了,没法看C和指针了,Java已经一周没看了。。。安卓的MSC也结束了,最终写出了一个记事本的布局文件。。。差强人意吧。总习惯在安卓一行代码后加分号….

  • 相关阅读:
    JS 反射机制及 Reflect 详解
    React Hooks
    深入理解 React setState
    React 函数组件和类组件的区别
    tsconfig.json 编译器配置大全
    React TS 解决不声明变量类型时的报错问题
    JSX onClick 和 HTML onclick 的区别
    深入理解 ES6 Generator
    JS 算法与数据结构之队列
    深入理解 ES6 Proxy
  • 原文地址:https://www.cnblogs.com/kugwzk/p/5058284.html
Copyright © 2011-2022 走看看