Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2538665
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: C/C++

2011-07-17 12:15:34

    编写一个C程序,实现这样的功能,从键盘输入任意个整数,以0作为结束标志,对这个数列从小到大排序。并输出结果。
    首先让我们想到的动态数列,我们最好就是使用链表存储数据了。然后使用冒泡排序对链表进行排序操作。代码如下:
  1. #include <string.h>
  2. #include <stdio.h>

  3. typedef int ElemType;

  4. typedef struct node{
  5.   ElemType data;
  6.   struct node *next;
  7. } LNode, *LinkList;

  8. LinkList GreatLinkList(int n)
  9. {
  10.   LinkList p,r,list = NULL;
  11.   ElemType e;
  12.   int i;
  13.   
  14.   for(i = 1; i <= n; i++){
  15.     scanf("%d",&e);
  16.     p=(LinkList)malloc(sizeof(LNode));
  17.     p->data = e;
  18.     p->next = NULL;

  19.     if(!list)
  20.       list = p;
  21.     else
  22.       r->next = p;
  23.     
  24.     r = p;
  25.   }
  26.   return list;
  27. }

  28. void insertList(LinkList *list, LinkList q, ElemType e)
  29. {
  30.   LinkList p;
  31.   p = (LinkList)malloc(sizeof(LNode));
  32.   p->data = e;

  33.   if(!*list){
  34.     *list = p;
  35.     p->next = NULL;
  36.   }
  37.   else{
  38.     p->next = q->next;
  39.     q->next = p;
  40.   }
  41. }

  42. void Sort(LinkList q)
  43. {
  44.   LNode *p = q;
  45.   int t,i,j,k=0;
  46.   while(p){
  47.     k++;
  48.     p = p->next;
  49.   }

  50.   p = q;
  51.   for(i=0; i<k-1; i++){
  52.     for(j=0; j<k-i-1; j++){
  53.       if(p->data > p->next->data){
  54.     t = p->data;
  55.     p->data = p->next->data;
  56.     p->next->data = t;
  57.       }
  58.       p = p->next;
  59.     }
  60.     p = q;
  61.   }
  62. }

  63. void Print(LinkList q)
  64. {
  65.   while(q){
  66.     printf("%d ",q->data);
  67.     q = q->next;
  68.   }
  69. }

  70. int main(int argc, char* argv[])
  71. {
  72.   ElemType e;
  73.   LinkList l,q;
  74.   printf("please input some integer digit and type 0 for end\n");
  75.   q = l = GreatLinkList(1);

  76.   scanf("%d",&e);
  77.   while(e){
  78.     insertList(&l,q,e);
  79.     q = q->next;
  80.     scanf("%d",&e);
  81.   }
  82.   
  83.   Sort(l);
  84.   Print(l);
  85.   return 0;
  86. }
程序编译,执行结果
E:\src\c\miaoqu>gcc 7.2.c
gcc 7.2.c
E:\src\c\miaoqu>a.exe
a.exe
4 32 4 5 6 7 8 0
please input some integer digit and type 0 for end
4 4 5 6 7 8 32
阅读(3222) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~