链表的排序(交换指针指向)
2014-06-26 09:15
113 查看
本学期c语言实习,要用到链表的排序。虽说以前没用过,但还是花时间写了写。老师说排序的时候指针不变交换节点里面的元素,我觉得这道不如交换指针的指向来的干脆,因为如果按老师的方法来写,节点里的元素很多的话就废了==
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
struct student
{
int a,b;
student *next;
};
int main()
{
student *q,*p,*h,*m,*temp;
h=NULL;
p=(student *)malloc(sizeof(student));
scanf("%d%d",&p->a,&p->b);
h=p;
q=p;
for(int i=0;i<5;i++)
{
p=(student *)malloc(sizeof(struct student));
q->next=p;
scanf("%d%d",&p->a,&p->b);
q=p;
}
q->next=NULL;
//=========================================================
//按元素b递增进行选择排序
int maxx=-99999;
for(p=h;p->next!=NULL;p=p->next)
{
if((p->next->b)>maxx)
{
maxx=(p->next->b);
q=p;
//
}
}
//printf("%d\n",maxx);
// printf("%d\n",q->next->b);
temp=q->next->next;
q->next->next=h->next;
h->next=temp;
temp=q->next;
q->next=h;
h=temp;
//printf("%d\n",h->b);
for(p=h;p->next->next!=NULL;p=p->next)
{
int maxx=-9999999;
for(q=p->next;q->next!=NULL;q=q->next)
{
if(q->next->b>maxx)
{
maxx=q->next->b;
m=q;
}
}
if(maxx>xp->next->b)
{
temp=p->next;
p->next=m->next;
m->next=temp;
if(m->next->next==NULL)
{
m->next->next=p->next->next;
p->next->next=NULL;
}
else
{
temp=p->next->next;
p->next->next=m->next->next;
m->next->next=temp;
}
}
}
//=============================================================
printf("\n\n");
for(p=h;p!=NULL;p=p->next)
{
printf("%d %d\n",p->a,p->b);
}
return 0;
}
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
struct student
{
int a,b;
student *next;
};
int main()
{
student *q,*p,*h,*m,*temp;
h=NULL;
p=(student *)malloc(sizeof(student));
scanf("%d%d",&p->a,&p->b);
h=p;
q=p;
for(int i=0;i<5;i++)
{
p=(student *)malloc(sizeof(struct student));
q->next=p;
scanf("%d%d",&p->a,&p->b);
q=p;
}
q->next=NULL;
//=========================================================
//按元素b递增进行选择排序
int maxx=-99999;
for(p=h;p->next!=NULL;p=p->next)
{
if((p->next->b)>maxx)
{
maxx=(p->next->b);
q=p;
//
}
}
//printf("%d\n",maxx);
// printf("%d\n",q->next->b);
temp=q->next->next;
q->next->next=h->next;
h->next=temp;
temp=q->next;
q->next=h;
h=temp;
//printf("%d\n",h->b);
for(p=h;p->next->next!=NULL;p=p->next)
{
int maxx=-9999999;
for(q=p->next;q->next!=NULL;q=q->next)
{
if(q->next->b>maxx)
{
maxx=q->next->b;
m=q;
}
}
if(maxx>xp->next->b)
{
temp=p->next;
p->next=m->next;
m->next=temp;
if(m->next->next==NULL)
{
m->next->next=p->next->next;
p->next->next=NULL;
}
else
{
temp=p->next->next;
p->next->next=m->next->next;
m->next->next=temp;
}
}
}
//=============================================================
printf("\n\n");
for(p=h;p!=NULL;p=p->next)
{
printf("%d %d\n",p->a,p->b);
}
return 0;
}
相关文章推荐
- 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- (Java实现)输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
- 链表的排序——冒泡(交换数据与交换指针)
- java 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- P279_1012 用了典型的冒泡法对字符串排序。侧重指针应用,交换指针所指向的地址。
- 牛客原题 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 题目:将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
- 链表排序交换节点为什么还得单独交换next指针?
- 采用选择排序法对链表进行排序,注意交换操作中不是对链表里某一节点里的某一元素进行交换,而是对两节点指针的交换
- 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
- 指针p,q,r依次指向某循环链表中三个相邻的结点,交换结点*q,*r在表中次序的程序段是
- 交换两个int指针所指向的内存地址。
- 一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个rand指针指向这个链表中的一个随机节点或NULL,现在要求复制一个单链表来实现这个链表,返回复制后的新链表。
- 习题 8.20 用指向指针的指针的方法对5个字符串排序并输出。
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
- 单链表进行排序-通过节点交换,不通过值交换
- 链表与指向指针的指针应用
- 二叉搜索树变成有序双向链表,要求不能创建新的结点,只调整指针的指向
- 结构体,指向数组指针,对数组的增删,排序,遍历算法