欢迎大家来到IT世界,在知识的湖畔探索吧!
题目要求:
编写一个C程序,实现这样的功能:从键盘输入任意个整数,以0作为结束标志,对这个整数序列从小到大排序,并输出排序后的结果。
题目分析:
要实现动态数列排序首先要选择好数据的存储结构。如果采取静态的线性存储结构,例如数组,静态顺序表等就无法实现动态数列排序的功能。因为静态线性存储结构的内存空间开辟在内存的静态区,它是在程序编译时就分配好了的,因此无法在程序运行时改变空间的大小,也就无法实现动态数列排序的功能。因此可以选择动态的顺序表或者链表作为数据的存储结构。
#include <string.h> #include <stdio.h> #include <malloc.h> /*定义int为ElemType类型*/ typedef int ElemType; /*定义链表的结点类型*/ typedef struct node{ ElemType data; /*数据域*/ struct node *next; /*指针域*/ }LNode,*LinkList; /*创建一个长度为n的链表,并输入数据*/ LinkList GreatLinkList(int n){ LinkList p,r,list=NULL; ElemType e; int i; for(i=1;i<=n;i++){ scanf("%d",&e); p=(LinkList)malloc(sizeof(LNode)); p->data=e; p->next=NULL; if(!list) list=p; else r->next=p; r=p; } return list; } /*向链表中插入结点,并向该结点的数据域中存放数据e*/ void insertList(LinkList *list,LinkList q,ElemType e){ LinkList p; p=( LinkList)malloc(sizeof(LNode)); p->data=e; if(!*list){ *list=p; p->next=NULL; } else{ p->next=q->next; q->next=p; } } /*销毁一个链表*/ void destroyLinkList(LinkList *list){ LinkList p,q; p=*list; while(p){ q=p->next; free(p); p=q; } *list=NULL; } /*基于链表的冒泡排序算法*/ void Sort(LinkList q) { LNode *p=q; int t,i,j,k=0; while(p) {k++; p=p->next;} p=q; for(i=0;i<k-1;i++) { for(j=0;j<k-i-1;j++) { if(p->data>p->next->data) { t=p->data; /*交换链表结点中的数据内容*/ p->data=p->next->data; p->next->data=t; } p=p->next; } p=q; } } /*打印出排序后的新链表中的内容*/ void Print(LinkList q) { while(q) { printf("%d ",q->data); q=q->next; } } /*主函数*/ main() { ElemType e; LinkList l,q; /*定义一个链表l*/ printf("Please input some integer digit and type 0 for end\n"); q=l=GreatLinkList(1); /*创建一个链表结点,q和l指向该结点*/ scanf("%d",&e); while(e) /*循环地输入数据,同时插入新生成的结点*/ { insertList(&l,q,e) ; q=q->next; scanf("%d",&e); } Sort(l); Print(l); destroyLinkList(&l); getche(); }
欢迎大家来到IT世界,在知识的湖畔探索吧!
运行结果:
运行结果
欢迎大家来到IT世界,在知识的湖畔探索吧!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/110853.html