zoukankan      html  css  js  c++  java
  • 初学数据结构五

      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 }
  • 相关阅读:
    Binary Tree Zigzag Level Order Traversal
    Binary Tree Level Order Traversal
    Symmetric Tree
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Triangle
    Populating Next Right Pointers in Each Node II
    Pascal's Triangle II
    Pascal's Triangle
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/Zblogs/p/3355545.html
Copyright © 2011-2022 走看看