• 链表


    最近复习了一下链表,觉得应该保留一下自己的代码, 以后忘记了扫一眼。

    指针链表

     1 #include<cstdio>
     2 #include<cstdlib>
     3 struct note
     4 {
     5     int data;
     6     struct note *next;
     7 };
     8 int main()
     9 {
    10     int n;
    11     scanf("%d", &n);
    12     struct note *head, *p, *q;
    13     head=(struct note *)malloc(sizeof(struct note));
    14     head->next=NULL;
    15     int temp;
    16 // 输入n个从小到大的数,用链表初始化 
    17     for(int i=1; i<=n; i++)
    18     {
    19         scanf("%d", &temp);
    20         p=(struct note *)malloc(sizeof(struct note));
    21         p->data=temp;
    22         p->next=NULL;
    23         if(head->next==NULL)
    24             head->next=p;
    25         else
    26             q->next=p;
    27         q=p;
    28     }
    29     struct note *t=head->next;
    30     while(t!=NULL)
    31     {
    32         printf("%d ", t->data);
    33         t=t->next;
    34     }
    35     printf("
    ");
    36 // 插入一个数字,并输出排序后结果,输入0结束 
    37     while(scanf("%d", &temp) && temp!=0)
    38     {
    39         t=head;
    40         while(1)
    41         {
    42             if(t->next==NULL)
    43             {
    44                 p=(struct note *)malloc(sizeof(struct note));
    45                 p->data=temp;
    46                 p->next=NULL;
    47                 t->next=p;
    48                 t=head->next;
    49                 while(t!=NULL)
    50                 {
    51                     printf("%d ", t->data);
    52                     t=t->next;
    53                 }
    54                 printf("
    ");
    55                 break;
    56             }
    57             if(t->next->data>temp)
    58             {
    59                 p=(struct note *)malloc(sizeof(struct note));
    60                 p->data=temp;
    61                 p->next=t->next;
    62                 t->next=p;
    63                 t=head->next;
    64                 while(t!=NULL)
    65                 {
    66                     printf("%d ", t->data);
    67                     t=t->next;
    68                 }
    69                 printf("
    ");
    70                 break;
    71             }
    72             t=t->next;
    73         }
    74     }
    75 }

     数组模拟链表(效果同上)

     1 #include<cstdio>
     2 int data[105], right[105];
     3 int main()
     4 {
     5     int n;
     6     scanf("%d", &n);
     7     for(int i=1; i<=n; i++)
     8         scanf("%d", &data[i]);
     9     for(int i=0; i<=n; i++)
    10     {
    11         if(i!=n)
    12             right[i]=i+1;
    13         else
    14             right[i]=0;
    15     }
    16     int t=1;
    17     while(t!=0)
    18     {
    19         printf("%d ", data[t]);
    20         t=right[t];
    21     }
    22     printf("
    ");
    23     int temp;
    24     int len=n;
    25     while(scanf("%d", &data[++len]) && data[len]!=0)
    26     {
    27         t=0;
    28         while(1)
    29         {
    30             if(right[t]==0)
    31             {
    32                 right[len]=0;
    33                 right[t]=len;
    34                 break;
    35             }
    36             if(data[len]<data[right[t]])
    37             {
    38                 right[len]=right[t];
    39                 right[t]=len;
    40                 break;
    41             }
    42             t=right[t];
    43         }
    44         t=0;
    45         while(1)
    46         {
    47             t=right[t];
    48             if(t==0)
    49                 break;
    50             printf("%d ", data[t]);
    51 
    52         }
    53         printf("
    ");
    54     }
    55 }

     双向链表

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 int right[100], left[100];
     5 void link(int l, int r)
     6 {
     7     left[r]=l;
     8     right[l]=r;
     9 }
    10 int main()
    11 {
    12     int n;
    13 // 输入n,表示链表里有1-n的数字 
    14     scanf("%d", &n);
    15     for(int i=1; i<=n; i++)
    16     {
    17         left[i]=i-1;
    18         right[i]=(i+1)%(1+n);
    19     }
    20     left[0]=n;
    21     right[0]=1;
    22     int t=0;
    23     while(1)
    24     {
    25         t=right[t];
    26         printf("%d ", t);
    27         if(right[t]==0)
    28         {
    29             printf("
    ");
    30             break;
    31         }
    32     }
    33 
    34     while(1)
    35     {
    36         int op, x, y;
    37 //  输入指令对应操作,op=0将x放在y的左边,op=1将x放在y的右边,op=2将x,y交换位置
    38         scanf("%d%d%d", &op, &x, &y);
    39         if(op==2 && right[y]==x)
    40             swap(x, y);
    41         int LX, RX, LY, RY;
    42         LX=left[x];
    43         RX=right[x];
    44         LY=left[y];
    45         RY=right[y];
    46         if(op==0 && LY!=x)
    47         {
    48             link(LX, RX);
    49             link(LY, x);
    50             link(x, y);
    51         }
    52         else if(op==1 && RY!=x)
    53         {
    54             link(LX, RX);
    55             link(x, RY);
    56             link(y, x);
    57         }
    58         else if(op==2)
    59         {
    60             if(RX==y)
    61             {
    62                 link(LX, y);
    63                 link(y, x);
    64                 link(x, RY);
    65             }
    66             else
    67             {
    68                 link(LX, y);
    69                 link(y, RX);
    70                 link(LY, x);
    71                 link(x, RY);
    72             }
    73         }
    74         int t=0;
    75         while(1)
    76         {
    77             t=right[t];
    78             printf("%d ", t);
    79             if(right[t]==0)
    80                 break;
    81         }
    82         printf("
    ");
    83     }
    84 }
  • 相关阅读:
    点击Notification之后收起通知栏
    Visual Studio常用的快捷键
    数据库语法二之外键
    数据引擎 创建表完整语法,字段类型,约束条件
    数据库 tcp协程实现并发 回调函数
    GIL以及协程
    进程,互斥锁,生产者消费者,线程
    udp协议,进程(同步,异步)
    单例模式,网络编程之tcp协议以及粘包问题
    网络编程
  • 原文地址:https://www.cnblogs.com/dongdong25800/p/9413025.html
Copyright © 2020-2023  润新知