• 单链表


    /*--------------------------------------------------------
     设有一个单链表,头结点为head,为递增有序,
     写一个完整程序,将其改为递减有序。
    ----------------------------------------------------------*/
    #include<stdio.h>
    #include<stdlib.h>
    //定义结点
    struct nodetype
    {
        int data;//数据域(可以是int,char,float,数组,结构体等类型)
        struct nodetype * next;
        //next指针域,指向下一个结点。
    };

    struct nodetype * InitialLinkList()
    {
        //初始化链表,返回头指针
        struct nodetype * head;
        head=(struct nodetype *)malloc(sizeof(struct nodetype));//
        head->next=NULL;
        return head;
    }

    void CreateLinkListInRear(struct nodetype * head, int numbers[], 
                              int LengthOfNumbers)
    {
        //尾接法创建单链表
        //从数组numbers[]中取出元素建立单链表
        //LengthOfNumbers为元素个数
        int i;
        struct nodetype * temp,* rear;
        rear=head;
        for(i=0;i<LengthOfNumbers;i++)
        {
            temp=(struct nodetype *)malloc(sizeof(struct nodetype));
            temp->data=numbers[i];
            temp->next=NULL;
            rear->next=temp;
            rear=temp;
        }
    }

    struct nodetype * ReverseLinkList(struct nodetype * head)
    {
        //参照头插法建立单链表的思路,注意:为简单起见,没有释放结点空间
        //注意:如果想到排序算法,就把简单问题复杂化了。
        struct nodetype * newHead;
        struct nodetype * temp;
        struct nodetype *p;
        newHead=InitialLinkList();
        p=head->next;
        while(p!=NULL)
        {
            temp=(struct nodetype *)malloc(sizeof(struct nodetype));
            temp->data=p->data;
            temp->next=newHead->next;
            newHead->next=temp;
            p=p->next;
        }
        return newHead;
    }

    void PrintIntegerLinkList(struct nodetype * head)
    {//显示链表结点数据
        struct nodetype *temp;
        temp=head->next;
        while(temp!=NULL)
        {
            printf("%d ",temp->data);
            temp=temp->next;
        }
        printf(" ");
    }

    void main()
    {
        struct nodetype *head;
        int y[8]={1,2,3,4,5,6,7,8};
        head=InitialLinkList();//初始化
        CreateLinkListInRear(head,y,8);//以数组y中元素创建链表
        printf("显示原始链表中的元素,升序: ");
        PrintIntegerLinkList(head);
        ReverseLinkList(head);
        printf("显示反转之后链表中的元素,降序: ");
        PrintIntegerLinkList(ReverseLinkList(head));//显示删除6后链表
        getchar();
    }
    运行结果如下:
    显示原始链表中的元素,升序:
    1 2 3 4 5 6 7 8
    显示反转之后链表中的元素,降序:
    8 7 6 5 4 3 2 1

  • 相关阅读:
    计算机网络
    计算机网络知识总结
    final,static,super,this
    ArrayList
    基础面试题
    BATJ都爱问的多线程面试题
    Session过期、失效时间
    类加载器ClassLoader源码解析
    连接ftp服务器 JDK 1.7
    根据当前请求的特征,判断该请求是否来自手机终端
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/7287213.html
Copyright © 2020-2023  润新知