动态链表排序的问题,求好心人修改

程序员会修电脑 2010-03-13 09:23:34

#include <iostream>
#include <malloc.h>
#define LEN sizeof(struct Number)
using namespace std;

struct Number
{
int num;
struct Number *next;
};

void main()
{
struct Number number,*head,*p,*q;
int x,i,j;
head=p=q=(struct Number *)malloc(LEN);
cin>>x;
for(i=0;;i++)
{
p->next=(struct Number *) malloc(LEN);
p=p->next;
p->num=x;
cin>>x;
if(x==0)break;
}
p->next=(struct Number *) malloc(LEN);
p->next=NULL;
p=head->next;
number.num=p->num;
for(j=i;i>1;i--)
for(;j>1;j--)
{
if(p->num>q->num)
{
number.num=p->num;
p->num=q->num;
q->num=number.num;

}
p++;
q++;
}
p=head->next;
while(p!=NULL)
{
cout<<p->num<<ends;
p=p+1;
}

}

...全文
107 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mm405 2010-03-13
  • 打赏
  • 举报
回复

void List::sort(){
//对链表进行排序
ListNode *p=first,*pr=p->link,*s,*temp,*sl;
s=first->link->link;sl=pr; //pr为p右驱,sl为s左驱
while(s!=NULL){
temp=s->link;
p=first;pr=p->link; //刷新p,pr指向头结点与第一个结点
while(pr!=s){
if(s->data<pr->data){
sl->link=temp;s->link=pr; //摘下s结点,插在pr前面
p->link=s;break;
}else{
p=pr;pr=pr->link; //pr结点后移一位
}
}
if(pr!=s){s=temp;} //刷新sl,s指针
else {sl=s;s=temp;}
}
};
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 abcdwww123 的回复:]
输入n个数字装在动态链表里
然后对链表排序
最后输出
我不知道链表排序要怎么做~求救
[/Quote]

不说别的,稳定的排序会写不?比如说冒泡。

数组排序的时候,你不是交换元素么。

int data = p->next->num;
p->next->num = p->num;
p->num = data;

只是交换链表这样交换而已,其他跟普通排序一样。

不用我把排序也贴出来了吧,书上,网上,大把。
昵称很不好取 2010-03-13
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
#define LEN sizeof(struct Number)

struct Number
{
int num;
struct Number *next;
};

int main(){
struct Number *head,*p,*q;
int x,i,j,temp;
head=p=q=(struct Number *)malloc(LEN);
cin>>x;
for(i=0;;i++)
{
p->next=(struct Number *) malloc(LEN);
p=p->next;
p->num=x;
cin>>x;
if(x==0)break;
}
p->next=NULL;
q = head->next;
for(j=1;j<i;++j){
p = q;
while(q && q->next != NULL){
if(q->num > q->next->num){
temp = q->num;
q->num = q->next->num;
q->next->num = temp;
}
q = q->next;
}
q = p->next;
}
p=head->next;
while(p!=NULL)
{
cout<<p->num<<" ";
p=p->next;
}
cout<<endl;
p = q = head;
while(p){
q = p->next;
free(p);
p = q;
}

system("pause");
return 0;
}

  • 打赏
  • 举报
回复
输入n个数字装在动态链表里
然后对链表排序
最后输出
我不知道链表排序要怎么做~求救

64,677

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧