关于链表的冒泡排序

来源:互联网 发布:大数据调查内容 编辑:程序博客网 时间:2024/05/21 07:52
#include <stdio.h>#include <stdlib.h>//创建链表结构体typedef struct node {int data;char name[15];struct node *pre;struct node *next;}node;//指定一个头节点node *head = NULL;//对写入链表的数据进行初始化int node_init(struct node *newnode,char a,int b){newnode -> data = b;newnode -> name[0] = a;newnode -> next = NULL;newnode -> pre = NULL;};//把数据写入链表int nodeddd(char a,int b){node *newnode = (node *)malloc(sizeof(struct node));node_init(newnode,a,b);struct node *file = head -> next;if(file == head){head -> next = newnode;head -> pre = newnode;newnode -> pre = head;newnode -> next = head;}else{while(1){file = file ->next;if(file -> next == head)break;}file -> next = newnode;head -> pre = newnode; newnode -> pre = file;newnode -> next = head;}return 0;};//把链表里的信息打印出来,分三种打印方式一种是直接打印列表里的字符串中的头字符 一种是打印链表里的data数据 一种两个都打印int show(struct node *head,int a){struct node *file ;switch(a){case 1:file = head->next;while(1){printf("the char is %c\n",file -> name[0] );file = file -> next;if(file  == head)break;}break;case 2:file = head -> next;while(1){printf("the data is %d\n",file -> data );file = file -> next;if(file  == head)break;}break;case 3: file = head -> next;while(1){printf("the data is %d\n",file -> data );printf("the char is %c\n",file -> name[0] );file = file -> next;if(file == head)break;}break;}return 0;}//字符冒泡排序的实现int zifumaopaohaixu(struct node *head){struct node *file = head -> next;struct node *get = file -> next;struct node *flg = head;while(1){file = head -> next;get = file -> next;while(1){if((file -> name[0]) > (get -> name[0])){get -> pre -> next = get -> next;get -> next -> pre = get -> pre;get -> pre = NULL;get -> next = NULL;get -> pre = file -> pre;get -> next = file;file -> pre -> next = get;file -> pre = get;get = file -> next;}else{file = file -> next;get = file -> next;}if(get == flg){flg = file ;break;}}if(flg -> pre == head -> next)break;}return 0;}//data冒泡排序的实现int shuzhimaopaopaixu(struct node *head){struct node *file = head -> next;struct node *get = file -> next;struct node *flg = head;while(1){file = head -> next;get = file -> next;while(1){if((file -> data) > (get -> data)){get -> pre -> next = get -> next;get -> next -> pre = get -> pre;get -> pre = NULL;get -> next = NULL;get -> pre = file -> pre;get -> next = file;file -> pre -> next = get;file -> pre = get;get = file -> next;}else{file = file -> next;get = file -> next;}if(get == flg){flg = file ;break;}}if(flg -> pre == head -> next)break;}return 0;}//主函数 int main(){head = (struct node *)malloc(sizeof(struct node));head -> pre = head;head -> next = head;char a[10] = {'z','T','t','A','u','m','k','g','s','a'};int z[10]={1,24,5,7,9,8,3,4};int i;for(i=0;i<10;i++){nodeddd(a[i],z[i]);}show(head,3);printf("\n");zifumaopaohaixu(head);show(head,1);printf("\n");shuzhimaopaopaixu(head);show(head,2);return 0;}

0 0