#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *nex;
struct node *pre;
}NODE;
void Add_HData(NODE*,int);
void Show_tdata(NODE*head);
void Sort_the_bubbling(NODE*head);
void Show_hdata(NODE*head);
void selection_sort(NODE*head) ;
int num;
int main()
{
NODE*head = (NODE*)malloc(sizeof(NODE));
//给head结点申请一个内存
head->pre = head;
head->nex = head;
//head上一个和下一个都指向自己
int data;
printf("请输入双链表长度:");
scanf("%d", &num);
for (int i = 1; i <= num; ++i)
{
printf("第%d个数据:", i);
scanf("%d", &data);
//插入函数调用位置
Add_HData(head, data);
}
printf("-----------input data end--------------------------\n");
//system("pause");
Show_tdata(head);
Sort_the_bubbling(head);
Show_hdata(head);
selection_sort(head);
Show_hdata(head);
return 0;
}
void Add_HData(NODE*head, int data)//插入函数(尾插法)
{
NODE*p = (NODE*)malloc(sizeof(NODE));
p->data = data;
p->nex = head;
p->pre = head->pre;
p->nex->pre = p;
p->pre->nex = p;
}
void Show_hdata(NODE*head)
{
int i=1;
NODE*p=(NODE*)malloc(sizeof(NODE));
p=head->nex;
while(p!=head)
{
printf("%d 个数据:%d\n",i,p->data);
p=p->nex;
i++;
}
printf("-----------show_hdata end-------------------------\n");
}
void Show_tdata(NODE*head)
{
int i=num;
NODE*p=(NODE*)malloc(sizeof(NODE));
p=head->pre;
while(p!=head)
{
printf("%d 个数据:%d\n",i,p->data);
p=p->pre;
i--;
}
printf("-----------show_tdata end--------------------------\n");
}
//冒泡排序 降序
void Sort_the_bubbling(NODE*head)
{
NODE*pi=(NODE*)malloc(sizeof(NODE));
NODE*pj=(NODE*)malloc(sizeof(NODE));
int num=0;
//int flags=0;
for(pj=head->nex ; pj!=head ; pj=pj->nex)
{
// flags=0;
for(pi=head->nex ; pi->nex!=head ; pi=pi->nex)
{
if(pi->data < pi->nex->data)
{
num=pi->data;
pi->data=pi->nex->data;
pi->nex->data=num;
//flags=1;
}
}
// if(!flags)
// break;
}
printf("-----------Sort_the_bubbling end--------------------------\n");
}
//选择排序 升序
void selection_sort(NODE*head)
{
NODE*pi=(NODE*)malloc(sizeof(NODE));
NODE*pj=(NODE*)malloc(sizeof(NODE));
NODE*subscript=(NODE*)malloc(sizeof(NODE));
int num=0;
for( pj=head->nex ; pj!=head ; pj=pj->nex )
{
subscript=pj;
for ( pi=pj->nex ; pi!= head ; pi = pi->nex )
{
if(subscript->data > pi->data)
{
subscript=pi;
}
}
if(subscript != pj)
{
num = subscript->data;
subscript->data = pj->data;
pj->data = num;
}
}
printf("-----------selection_sort end--------------------------\n");
}
双向循环链表、冒泡、选择排序
最新推荐文章于 2023-06-28 21:24:39 发布