链表函数(建立,删除重复元素,排序,输出)—— 链表的有序集合


/**************************************
      Problem id    : SDUT OJ 2178 
      User name    : Silence-Debug 
      Result        : Accepted 
      Take Memory    : 316K 
      Take Time    : 0MS 
      Submit Time    : 2013-05-31 21:05:15  
  **************************************/
 # include <stdio.h>
 # include <stdlib.h>
  
  struct node
  {
      int date;
      struct node *next;
  } ;
  
  struct node *creat(int n)
  {
      struct node *head, *tail, *p;
      head = (struct node *)malloc(sizeof(struct node));
      head -> next = NULL;
      tail = head;
      for(int i = 0; i < n; i++)
      {
          p = (struct node *)malloc(sizeof(struct node));
          scanf("%d", &p -> date);
          p -> next = NULL;
          tail -> next = p;
          tail = p;
      }
      return head;
  }
  
  void Delete(struct node *&head, int n)
  {
      struct node *p, *q, *t, *tail;
      p = head -> next;
      while(p)
      {
          q = p->next;
          t = p;
          while(q)
          {
              tail = q;
              if (p -> date == q -> date)
              {
                  n--;
                  t -> next = q -> next;
                  q = q -> next;
                  free(tail);
              }
              else
              {
                  q = q->next;
                  t = t->next;
              }
          }
          p = p -> next;
      }
  
  }
  
  void sortline(struct node *&head, int n)
  {
      struct node *p, *q;
      while(n--)
      {
          p = head -> next;
          q = p -> next;
          while(p -> next)
          {
              if(p -> date > q -> date)
              {
                  int t = p -> date;
                  p -> date = q -> date;
                  q -> date = t;
              }
              p = p -> next;
              q = q -> next;
          }
      }
  }
  
  void output(struct node *head)
  {
      struct node *r = head;
      while(r -> next -> next != NULL)
      {
          printf("%d ", r -> next -> date);
          r = r -> next;
      }
      printf("%d\n", r -> next -> date);
  }
  
  int main(void)
  {
      int n;
      while(~scanf("%d", &n))
      {
          struct node *head;
          head = creat(n);
          Delete(head, n);
          sortline(head, n);
          output(head);
      }
  
      return 0;
  }
View Code

优质内容筛选与推荐>>
1、全局唯一标识符(GUID)
2、HDU 4046【树状数组】
3、微信小程序mpvue-动态改变navigationBarTitleText值
4、数据结构——二叉树操作
5、关于《大话设计模式》访问者模式菜鸟的一些疑问


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn