/*2018.11
*数据结构与算法-第8章习题T3算法设计题
*(2)有n个记录存储在带头结点的双向链表中,利用双向冒泡排序法对其按升序进行排序,请写出这种排序的算法
*注:双向冒泡排序即相邻两趟排序向相反方向冒泡
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define OK 1
#define ERROR 0
typedef int elemtype;
typedef struct listnode
{
elemtype data;
struct listnode *prior,*next;
}listnode,*link;
typedef struct
{
link head;
int len;
}Sqlist;
void initList(Sqlist &list)/*创建链表*/
{
list.head=(link)malloc(sizeof(listnode));
list.head->next=list.head->prior=list.head;
list.len=0;
}
int ListInsert(Sqlist &list,int i,int num)/*在特殊位置插入结点*/
{
link p,q;
int j=0;
q=list.head;
while(q && j<i-1)
{
q=q->next;
j++;
}
if(!q || j>i-1)
return ERROR;
//即将在q后插入p
p=(link)malloc(sizeof(listnode));
p->data=num;
p->prior=q;//新结点的前驱指向q
p->next=q->next;//新结点的后继是q的后继
q->next->prior=p;//q原来后继的前驱是新结点
q->next=p;//q的后继是p
list.len++;
return OK;
}
void printList(Sqlist &list)/*打印链表中的数据内容*/
{
int count=1;
link p=list.head->next;
while(p!=list.head)
{
printf("%5d",p->data);
p=p->next;
if(count%10==0)
printf("\n");
count++;
}
printf("\n");
}
void bubblesort(Sqlist &list)/*双向冒泡排序法对带头结点的双向链表按升序进行排序*/
{
int flag=1;
link head,tail,p,temp;
head=tail=list.head;
while(flag)
{
p=head->next;
flag=0;
while(p->next!=tail)
{
if(p->data > p->next->data)//大数下沉
{
temp=p->next;flag=1;
p->next=temp->next;temp->next->prior=p;
temp->next=p;p->prior->next=temp;
temp->prior=p->prior;p->prior=temp;
}
else
p=p->next;
}
tail=p;
p=tail->prior;
while(flag && p->prior!=head)
{
if(p->data < p->prior->data)//小数上浮
{
temp=p->prior;flag=1;
p->prior=temp->prior;temp->prior->next=p;
temp->prior=p;p->next->prior=temp;
temp->next=p->next;p->next=temp;
}
else
p=p->prior;
}
head=p;
}
}
int main()/*主函数*/
{
Sqlist list1;
initList(list1);
int num,random=0,flag;
printf("请输入一个整数:");
scanf("%d",&num);
srand((unsigned)time(NULL));
for(int i=1;i<=num;i++)
{
random=rand()%100;
flag=ListInsert(list1,i,random);
}
printList(list1);//next输出
//printList2(list1);//prior输出
bubblesort(list1);
printf("After sorted:\n");
printList(list1);
return 0;
}
有n个记录存储在带头结点的双向链表中,利用双向冒泡排序法对其按升序进行排序,请写出这种排序的算法
最新推荐文章于 2024-08-25 22:21:25 发布