zoukankan      html  css  js  c++  java
  • 未完成数据结构题目

    #include<iostream>
    #include<stdlib.h>
    using namespace std;

    typedef struct Position
    {
    int Element;
    struct Position*base;
    struct Position *next;
    }Position, *LinkList;

    LinkList CreateList(LinkList& p)
    {
    LinkList head;
    p=head= (LinkList) malloc(sizeof(Position));

    printf("Please input 4 numbers:");
    for (int i = 0; i < 4; i++)
    {
    cin >> p->Element;
    p->next = (LinkList) malloc(sizeof(LinkList));
    p = p->next;
    }
    p->next = head;
    return p;
    }

    void main()
    {
    int n=5,x,y;
    LinkList p,q;
    CreateList(p);

    cout << "Please input x and y:" << endl;
    cin >> x >> y;
    for (int i=1; i < y - 1; i++)
    p = p->next;
    q = (LinkList) malloc(sizeof(Position));
    q->Element = x;
    q->next = p->next;
    p->next = q;
    for (int i = 1; i < 5- x; i++)
    p = p->next;

    while ()
    {
    cout << p->Element<<" ";
    p = p->next;
    }

    }

      1 //假设带表头结点的单向链表头指针为head,试编写一个算法将值为5的结点插入到连接表的第k个结点前,删除第k个节点,并对该链表进行排序。
      2 #include <stdio.h>
      3 #include <stdlib.h>
      4 #include <malloc.h>
      5 #include <time.h>
      6 struct NODE {
      7     int          data;
      8     struct NODE *next;
      9 } H,*head,*p,*q,*s1,*s2,*s3,*s4,*s;
     10 int i,j,k,n,t,m;
     11 int main() {
     12     srand(time(NULL));
     13 
     14     //填写头节点数据
     15     H.data=-1;
     16     H.next=NULL;
     17     head=&H;
     18 
     19     //创建10个节点的单链表
     20     p=head;
     21     for (i=0;i<10;i++) {
     22         q=(struct NODE *)malloc(sizeof(struct NODE));
     23         if (NULL==q) return 1;
     24         q->data=rand()%100;//填写0..99的随机值
     25         q->next=NULL;
     26         p->next=q;
     27         p=q;
     28     }
     29 
     30     //输出整个单链表
     31     s=head->next;
     32     while (1) {
     33         if (NULL==s) {
     34             printf("
    ");
     35             break;
     36         }
     37         printf("%02d->",s->data);
     38         s=s->next;
     39     }
     40 
     41     //将值为5的结点插入到单链表的第k个结点前
     42     k=3;
     43     n=0;
     44     p=head;
     45     while (1) {
     46         if (NULL==p) {
     47             break;
     48         }
     49         n++;
     50         if (k==n) {
     51             q=(struct NODE *)malloc(sizeof(struct NODE));
     52             if (NULL==q) return 1;
     53             q->data=5;
     54             q->next=p->next;
     55             p->next=q;
     56             break;
     57         }
     58         p=p->next;
     59     }
     60 
     61     //输出整个单链表
     62     s=head->next;
     63     while (1) {
     64         if (NULL==s) {
     65             printf("
    ");
     66             break;
     67         }
     68         printf("%02d->",s->data);
     69         s=s->next;
     70     }
     71 
     72     //删除第k个节点
     73     k=5;
     74     n=0;
     75     p=head;
     76     while (1) {
     77         if (NULL==p) {
     78             break;
     79         }
     80         n++;
     81         if (k==n) {
     82             q=p->next;
     83             if (q) {
     84                 p->next=q->next;
     85                 free(q);
     86             }
     87             break;
     88         }
     89         p=p->next;
     90     }
     91 
     92     //输出整个单链表
     93     s=head->next;
     94     while (1) {
     95         if (NULL==s) {
     96             printf("
    ");
     97             break;
     98         }
     99         printf("%02d->",s->data);
    100         s=s->next;
    101     }
    102 
    103     //从小到大排序
    104     for (p=head;p!=NULL && p->next!=NULL;p=p->next) {
    105         for (q=p->next;q!=NULL && q->next!=NULL;q=q->next) {
    106             if (p->next->data > q->next->data) {
    107 
    108                 //交换data
    109 //              printf("swap %02d %02d
    ",p->next->data,q->next->data);
    110 //              t=p->next->data;p->next->data=q->next->data;q->next->data=t;
    111 
    112                 //或者
    113 
    114                 //交换next
    115 //              printf("swap %02d %02d
    ",p->next->data,q->next->data);
    116                 s1=p->next;
    117                 s2=p->next->next;
    118                 s3=q->next;
    119                 s4=q->next->next;
    120 
    121                 if (s2!=s3) {
    122                      p->next=s3;
    123                     s3->next=s2;
    124                      q->next=s1;
    125                     s1->next=s4;
    126                 } else {
    127                      p->next=s3;
    128                     s3->next=s1;
    129                            q=s3;
    130                     s1->next=s4;
    131                 }
    132 
    133                 //输出整个单链表
    134 //              s=head->next;
    135 //              while (1) {
    136 //                  if (NULL==s) {
    137 //                      printf("
    ");
    138 //                      break;
    139 //                  }
    140 //                  printf("%02d->",s->data);
    141 //                  s=s->next;
    142 //              }
    143 //              getchar();
    144             }
    145         }
    146     }
    147 
    148     //输出整个单链表
    149     s=head->next;
    150     while (1) {
    151         if (NULL==s) {
    152             printf("
    ");
    153             break;
    154         }
    155         printf("%02d->",s->data);
    156         s=s->next;
    157     }
    158 
    159     //将单链表中前 m 个结点和后 n 个结点进行互换,m+n为链表总长10
    160     m=4;
    161     n=6;
    162     k=0;
    163     p=head;
    164     while (1) {
    165         if (NULL==p) {
    166             break;
    167         }
    168         k++;
    169         if (m+1==k) {
    170             q=p;
    171         }
    172         s=p;
    173         p=p->next;
    174     }
    175     s1=head->next;
    176     head->next=q->next;
    177     s->next=s1;
    178     q->next=NULL;
    179 
    180     //输出整个单链表
    181     s=head->next;
    182     while (1) {
    183         if (NULL==s) {
    184             printf("
    ");
    185             break;
    186         }
    187         printf("%02d->",s->data);
    188         s=s->next;
    189     }
    190 
    191     //释放所有节点
    192     p=head->next;
    193     while (1) {
    194         if (NULL==p) {
    195             break;
    196         }
    197         q=p->next;
    198         free(p);
    199         p=q;
    200     }
    201 
    202     return 0;
    203 }
    204 //18->94->58->17->27->20->43->57->75->78->
    205 //18->94->05->58->17->27->20->43->57->75->78->
    206 //18->94->05->58->27->20->43->57->75->78->
    207 //05->18->20->27->43->57->58->75->78->94->
    208 //43->57->58->75->78->94->05->18->20->27->
    209 //
     1 C 加struct list 才是一种类型。
     2 
     3 struct alist{     int a;     struct alist *next; }; 
     4 
     5 C++ ,alist 就是struct alist 都是类型名。
     6 另外 C++标准库有个 list 模板
     7 所以,一般类型定义,不要定义成list 这样的名字。
     8 
     9 你把你的程序,分别存为 .c ,.cpp
    10 用C,C++编译器分别编译一下,看看。
    11 C一般不能通过,C++一般可以通过。
    12 
    13 C++ ,struct,union,class ,enum 类型定义后,不需要加struct,union,class ,enum 等 类型关键字 就是类型名字。
    14 
    15 C一般必须加类型名,才是一个完整的类型名字。
  • 相关阅读:
    我的Android app开发生涯
    极客学院
    区分H5和native页面
    H5之测试工具
    放最多水
    数组去重 快慢指针
    搜索插入位置 二分查找
    this指向
    JS 抖动和节流
    图片懒加载和预加载
  • 原文地址:https://www.cnblogs.com/Zblogs/p/3362540.html
Copyright © 2011-2022 走看看