• 初学数据结构五


      1 void MergeList(LinkList &ha, LinkList &hb, LinkList &hc)
      2 {
      3     LinkList pa, pb;
      4     pa = ha;
      5     pb = hb;
      6     while (pa->next && pb->next)
      7     {
      8         pa = pa->next;
      9         pb = pb->next;
     10     }
     11     if (!pa->next)
     12     {
     13         hc = hb;
     14         while (pb->next)
     15             pb = pb->next;
     16         pb->next = ha->next;
     17     }
     18     else
     19     {
     20         hc = ha;
     21         while (pa->next)
     22             pa = pa->next;
     23         pa->next = hb->next;
     24     }
     25 }
     26 
     27 
     28 Status DeleteAndInsertSub(LinkList &la, LinkList &lb, int i, int j, int len)
     29 {
     30     LinkList p, q, s, prev = NULL;
     31     int k = 1;
     32     if (i < 0 || j < 0 || len < 0)
     33         return INFEASIBLE;
     34     p = la;
     35     while (p && k < i)
     36     {
     37         prev = p;
     38         p = p->next;
     39         k++;
     40     }
     41     if (!p)
     42         return INFEASIBLE;
     43     q=p;
     44     k = 1;
     45     while (q && k < len)
     46     {
     47         q = p->next;
     48         k++;
     49     }
     50     if (!q)
     51         return INFEASIBLE;
     52     if (!prev)
     53         la = q->next;
     54     else
     55         prev->next = q->next;
     56     if (j = 1)
     57     {
     58         q->next = lb;
     59     lb = p;
     60     }
     61     else
     62     {
     63         s = lb;
     64         k = 1;
     65         while (s && k < j - 1)
     66         {
     67             s = s->next;
     68             k++;
     69         }
     70         if (!s)
     71             return INFEASIBLE;
     72         q->next = s->next;
     73         s->next = p;
     74     }
     75     return OK;
     76 }
     77 
     78 
     79 Status ListDelete_L(LinkList &L, ElemType mink, ElemType maxk)
     80 {
     81     LinkList p, q, prev = NULL;
     82     if (mink > maxk)
     83         return ERROR;
     84     p = L
     85         prev = p;
     86     p = p->next;
     87     while (p && p-> data < maxk)
     88     {
     89         if (p->data <= mink)
     90             prev = p;
     91         p = p->next;
     92     }
     93     else
     94     {
     95         prev->next = p->next;
     96         q = p;
     97         p = p->next;
     98         free(q);
     99     }
    100     }
    101 return OK;
    102 }
    103 
    104 Status ListOppose_Sq(SqList &L)
    105 {
    106     int i;
    107     ElemType x;
    108     for (i = 0; i < L.length / 2; i++)
    109     {
    110         x = L.elem[i];
    111         L.elem[i] = L.elem[L.length - 1 - i];
    112         L.elem[L.length - 1 - i] = x;
    113     }
    114     return OK;
    115 }
    116 
    117 Status ListOppose_L(LinkList &L)
    118 {
    119     linkList p, q;
    120     p = L;
    121     p = p->next;
    122     L - next = NULL;
    123     while (p)
    124     {
    125         q = p;
    126         p = p->next;
    127         q->next = L->next;
    128         L->next = q;
    129     }
    130     return OK;
    131 }
    132 Status ListOppose_L(LinkList&L)
    133 {
    134     Linklist p, q;
    135     p = L;
    136     p = p->next;
    137     L->next = NULL;
    138     while (P)
    139     {
    140         q = p;
    141         p = p->next;
    142         q->next = L->next;
    143         L->next = q;
    144     }
    145     return OK;
    146 }
      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 struct _Node
      4 {
      5     int data;
      6     struct _Node *next;
      7 };
      8 typedef struct _Node node_t;//
      9 typedef struct _Linklist
     10 {
     11     node_t * phead;//就算下面那个结构体有一个尾指针,也不是双向,尾指针只能用来索引尾节点,没法往前索引了。只有单向,主要看方向
     12     //不是看头结点那个表头单向可以用双向也可以用
     13     node_t * ptail;
     14     int len;
     15 }Linklist;
     16 static node_t * GetNode(int i)    // 新建并初始化节点
     17 {
     18     node_t *pNode;
     19     pNode = (node_t *) malloc(sizeof(node_t));
     20     if (!pNode)
     21     {
     22         printf("Error,the memory is not enough!
    ");
     23         exit(-1);
     24     }
     25     pNode->data = i;
     26     pNode->next = NULL;
     27     return pNode;
     28 }
     29 void init_list(Linklist *plist)    // 用第一个节点初始化循环单链表
     30 {
     31     node_t *p;
     32     p = GetNode(1);
     33     //  printf("The New Node is: %d
    ", p -> data);   // **** TEST ****
     34     plist->phead = p;
     35     plist->ptail = p;
     36     p->next = plist->phead;
     37     plist->len = 1;
     38 }
     39 static void Create_List(Linklist *plist, int n)    // 把其余数据添加到循环单链表中
     40 {
     41     int i = 0;
     42     node_t *pNew;
     43     for (i = 2; i <= n; i++)
     44     {
     45         pNew = GetNode(i);
     46         /******** TEST ********
     47         printf("The New Node is: %d
    ", pNew -> data);
     48         ******** TEST ********/
     49         plist->ptail->next = pNew;
     50         plist->ptail = pNew;
     51         pNew->next = plist->phead;
     52         plist->len++;
     53     }
     54     printf("Completes the e-way circulation chain table the foundation!
    ");
     55 }
     56 void Print_List(Linklist *plist)    // 输出链表内容
     57 {
     58     node_t *pCur = plist->phead;//
     59     do
     60     {
     61         printf("The %d person.
    ", pCur->data);
     62         pCur = pCur->next;
     63     } while (pCur != plist->phead);
     64     printf("The length of the List: %d
    ", plist->len);
     65 }
     66 void joseph(Linklist *plist, int m)    //约瑟夫回环函数实现
     67 {
     68     node_t *pPre = plist->ptail;
     69     node_t *pCur = plist->phead;
     70     int i;
     71     while (plist->len != 1)
     72     {
     73         i = 0;
     74         while (i < m - 1)
     75         {
     76             pPre = pPre->next;
     77             i++;
     78         }
     79         pCur = pPre->next;
     80         pPre->next = pCur->next;
     81         free(pCur);
     82         plist->len--;
     83     }
     84     printf("The last one is: %d
    ", pPre->data);
     85 }
     86 int main()
     87 {
     88     int n = 0;
     89     printf("Please input the Length of the Circle list: ");
     90     scanf_s("%d", &n);
     91     int m = 0;
     92     printf("Please input the Stop point: ");
     93     scanf_s("%d", &m);
     94     Linklist pList;
     95     init_list(&pList);
     96     Create_List(&pList, n);
     97     Print_List(&pList);
     98     joseph(&pList, m);
     99     system("pause");
    100     return 0;
    101 }
  • 相关阅读:
    uni-app 发起请求,Toast 消息提示 ,跳转页面
    uView初识
    uni-app初识
    docker目录 /var/lib/docker/containers 日志清理
    Linux中使用pigz工具更快的压缩和解压文件
    docker 修改默认网段
    LayaAir提示:版本不匹配!全局tsc(2.7.2)!=VS Code的语言服务(2.1.5)。可能出现不一致的编译错误
    C++ 格式化 浮点为字符串
    安装 ta-lib
    编译 python 代码
  • 原文地址:https://www.cnblogs.com/Zblogs/p/3355545.html
Copyright © 2020-2023  润新知