• 线性表应用:建立一个随机数 链表获得中间结点


      1 方法一:生成链表  计算节点个数  找到中间
      2 方法二:Status GetMidNode(LinkList L, ElemType *e)  //用两个指针 快指针是慢指针移动速度的两倍 快指针移动到结尾 则慢指针移动到中央  (这种方法是第一种方法速度三倍)
      3        {
      4           LinkList search, mid;
      5           mid = search = L;
      6 
      7           while (search->next != NULL)
      8          {
      9                //search移动的速度是 mid 的2倍
     10                if (search->next->next != NULL)
     11                {
     12                    search = search->next->next;
     13                    mid = mid->next;
     14                }
     15                else
     16                {
     17                    search = search->next;
     18                }
     19           }
     20 
     21     *e = mid->data;
     22     return OK;
     23 }
     24 纯自己实现的代码  嘻嘻  建立了一个20个结点的链表
     25 其中相关的time函数  srand rand函数在知识点中查阅
     26 #include<stdio.h>
     27 #include<stdlib.h>
     28 #include<time.h>
     29 
     30 #define LEN sizeof(LinkList)
     31 
     32 LinkList *ListInit();
     33 LinkList *creatList(LinkList *L);
     34 void printList(LinkList *L);
     35 int ListLength(LinkList *L);
     36 int GetMidNode(LinkList *L);
     37 void releaseList(LinkList *L);
     38 
     39 typedef struct Node
     40 {
     41     int data;
     42     struct Node *next;
     43 }LinkList;
     44 
     45 LinkList *ListInit()
     46 {
     47     LinkList *L;
     48     
     49     L = (LinkList *)malloc(LEN);
     50     if(L == NULL)
     51     {
     52         printf("内存分配失败!");
     53         exit(1); 
     54     }
     55     L->next = NULL;
     56     return L;  //创建头结点并返回 
     57 }
     58 
     59 LinkList *creatList(LinkList *L)
     60 {
     61     LinkList *p;
     62     LinkList *q;
     63     int n = 20;
     64     int temp = 0;
     65     srand(time(0));
     66     
     67     for(int i = 0; i< 20; i++)
     68     {
     69         temp++;
     70         p = (LinkList *)malloc(LEN);
     71         p->data = rand()%100;
     72         
     73         if(temp == 1)
     74         {
     75             L->next = p;
     76         }
     77         else
     78         {
     79             q->next = p;
     80         }
     81         q = p;
     82     }
     83     q->next =NULL;
     84     return L;
     85 }
     86 
     87 int ListLength(LinkList *L)
     88 {
     89     LinkList *p;
     90     int i = 0;
     91     
     92     p = L->next;
     93     while(p != NULL)
     94     {
     95         i++;
     96         p = p->next;
     97     }
     98     return i;
     99 }
    100 
    101 void printList(LinkList *L)
    102 {
    103     LinkList *p;
    104     p = L->next;
    105     while(p != NULL)
    106     {
    107         printf("%d  ",p->data);
    108         p = p->next;
    109     }
    110 }
    111 
    112 int GetMidNode(LinkList *L) //search的移动速度是mid的两倍 
    113 {
    114     LinkList *search;
    115     LinkList *mid;
    116     int mid_data;
    117     
    118     mid = search = L;
    119     while(search->next != NULL)
    120     {
    121         if(search->next->next != NULL)
    122         {
    123             search = search->next->next;
    124             mid = mid->next;
    125         }
    126         else
    127         {
    128             search = search->next;
    129         }
    130     }
    131     mid_data = mid->data; 
    132     return mid_data;
    133 }
    134 
    135 void releaseList(LinkList *L)
    136 {
    137     LinkList *temp;
    138     
    139     while(L != NULL)
    140     {
    141         temp = L;
    142         L = L->next;
    143         free(temp);
    144     }
    145 }
    146 
    147 int main(void)
    148 {
    149     LinkList *L;
    150     int num;
    151     int midnode;
    152     L = ListInit();//创建头结点并且返回
    153     
    154     creatList(L);  //创建随机数据链表 
    155     printf("生成随机数据链表:\n");
    156     printList(L);  //查看链表 
    157     printf("\n");
    158     num = ListLength(L); //测量长度
    159     printf("链表长度是:%d\n",num);
    160     midnode = GetMidNode(L);//获得中间结点的值
    161     printf("中间结点的值是:%d\n",midnode);
    162     releaseList(L);//释放内存
    163     return 0;
    164 }
  • 相关阅读:
    六:观察者模式
    聊一聊如何接入支付宝
    每天学点SpringCloud(八):使用Apollo做配置中心
    每天学点SpringCloud(七):路由器和过滤器-Zuul
    每天学点SpringCloud(六):Hystrix使用
    每天学点SpringCloud(五):如何使用高可用的Eureka
    每天学点SpringCloud(四):Feign的使用及自定义配置
    每天学点SpringCloud(三):自定义Eureka集群负载均衡策略
    每天学点SpringCloud(二):服务注册与发现Eureka
    每天学点SpringCloud(一):使用SpringBoot2.0.3整合SpringCloud
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12491221.html
Copyright © 2020-2023  润新知