首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

冒泡法排序(指针)-二

2012-11-05 
冒泡法排序(指针)--2#includestdio.h#includemalloc.hstruct node{int datastruct node *next}void

冒泡法排序(指针)--2

#include<stdio.h>   #include<malloc.h>     struct node{      int data;      struct node *next;  };  void print(struct node *head);       main(){      struct node *head, *tail, *p, *pt, *p1, *p2, *p0, *px;      int i;///////////////////////////////////////////////////*初始化一个链表*/      p = (struct node*)malloc(sizeof(struct node));      printf("请输入第1个节点的值:");scanf("%d", &p->data); p->next = NULL;      head = tail = p;      for(i=2; i<=10; i++){          p = (struct node*)malloc(sizeof(struct node));          p->next = NULL;          printf("请输入第%d个节点的值:", i);          scanf("%d", &p->data);          tail->next = p;          tail = p;       }    //////////////////////////////////////////////////    /*链表冒泡法排序*/p0 = head->next;/*包含头结点的比较为特殊情况,先进行比较*/ if(head->data > p0->data) {head->next = p0->next;p0->next= head;head = p0;}//此时p0等于head//print(head);while(1) {pt = head;while(1) {//p0为前置节点,p1,p2为要比较的节点 p0 = pt;p1 = p0->next;p2 = p1->next;if(p1->data > p2->data) {p1->next = p2->next;p0->next = p2;p2->next = p1;/*if里面的if和else里面的if的作用是一样的,因为如果产生了交换,p2和p1的位置发生了变化,所以要根据特定情况,进行特定判断*//*if里面的判断条件:第1个判断条件只在第一次循环比较的时候有用,后面的循环都是因为p1或p2==px而执行break跳出第一层while循环*/ if(p1->next==NULL || p1==px) {px = p2;break;}}else {if(p2->next==NULL || p2==px) {px = p1;break;} }pt = pt->next;}/*px的作用:每进行一次循环比较,就将一个最大的数推到最后,而px就记录这个最大数的前面一个数,排序完后px == head->next*/ if(px == head->next) break;    }      print(head);}void print(struct node *head) {struct node *pt;pt = head;while(1) {printf("%d ", pt->data);if(pt->next == NULL) break;pt = pt->next;}}


 

热点排行