| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3553 人关注过本帖
标题:[求助]单链表插入排序
只看楼主 加入收藏
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

发帖的时候搜索下,论坛这程序早有了,而且有很多


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-30 22:08
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
以下是引用独角龙在2006-5-30 21:08:00的发言:
俺可不强啊,再说我也没时间了,一会就走了!
这事你还是找 论坛  大哥去吧!!
你要不把你的帖子发到数据结构去,他是那的斑竹!

小贼,我和你有仇啊,这东西搞两天了吧,我不告诉你按数组吗


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-30 22:12
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 

2 question:


看看行不行:

/* 输入四个正整数m、n、x和y,求出它们的最小公倍数。 */

#include <stdio.h>
#define N 4

static void Sort(int a[]);

int main(void)
{
long a[N], i, k;

for (i = 0; i < N; i++)
{
scanf("%d", &a[i]);
}

Sort(a);

if (a[3] % a[2] == 0 && a[3] % a[1] == 0 && a[3] % a[0] == 0)
{
printf("%d\n", a[3]);
}
else if (a[3] * a[2] % a[3] == 0 && a[3] * a[2] % a[2] == 0 && a[3] * a[2] % a[1] == 0 && a[3] * a[2] % a[0] == 0)
{
printf("%d\n", a[3] * a[2]);
}
else if (a[3] * a[2] * a[1] % a[3] == 0 && a[3] * a[2] * a[1] % a[2] == 0 && a[3] * a[2] * a[1] % a[1] == 0 && a[3] * a[2] * a[1] % a[0] == 0)
{
printf("%d\n", a[3] * a[2] * a[1]);
}
else
{
printf("%d\n", a[3] * a[2] * a[1]);
}

return 0;
}

static void Sort(int a[])
{
int i, j, temp;

for (i = 0; i < N - 1; i++)
{
for (j = i + 1; j < N; j++)
{
if (a[i] > a[j])
{
temp = a[i], a[i] = a[j], a[j] = temp;
}
}
}
}













日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-30 23:04
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
# include <stdio.h>
long Max(long x,long y)
{
long k;
for(k=(x>y)?x:y;k%x!=0||k%y!=0;k++);
return(k);
}
int main(void)
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
printf("%ld\n",Max(Max(a,b),Max(c,d)));
return 0;
}

4个整数的最小公倍数!

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-31 00:56
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
13楼的 论坛 同志,首先你对照下 SunShining 的就知道你多么兴师动众

另外:你主函数中sort(a),a的类型和函数定义不匹配!
最重要的你写了那么长,程序逻辑还不严密。例如输入4 5 4 5
这四个数的最小公倍数是你程序求出的100?

不要记恨我 此贴绝对是为了笑一下

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-31 01:33
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
复杂点好,让别人看不懂,那程序是有问题

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-31 11:20
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

wtc下运行通过,但在C-FREE却不行
晕死我了,看楼主您的程序总是那么累...
#include <stdio.h>
#include <malloc.h>

typedef struct node
{
int data;
struct node *next;
}*LinkList, ListNode;

void CreateList(LinkList *headPtr, LinkList *tailPtr);
void Insert_sort(LinkList *headPtr);/*插入排序*/
void VisitList(LinkList headPtr);


int main(void)
{
LinkList newhead = NULL, newtail = NULL;

CreateList(&newhead, &newtail);
VisitList(newhead);

Insert_sort(&newhead);
VisitList(newhead);
getch();
return 0;
}

void CreateList(LinkList *headPtr, LinkList *tailPtr)
{
int newdata;
LinkList newPtr = NULL;

printf("Enter one number:\n");
scanf("%d", &newdata);
while (newdata != 0)
{
newPtr = (LinkList)malloc(sizeof(ListNode));
if (newPtr == NULL)
{
exit(1);
}

newPtr -> data = newdata;
newPtr -> next = NULL;
if (*headPtr == NULL)
{
newPtr -> next = *headPtr;
*headPtr = newPtr;
}

else
{
(*tailPtr) -> next = newPtr;
}
newPtr -> next = NULL;
*tailPtr = newPtr;

printf("Enter one number:\n");
scanf("%d", &newdata);
}
}

void Insert_sort(LinkList *headPtr)
{
LinkList prev = NULL, cur = NULL, q = NULL, prev2 = NULL;
prev=*headPtr;

while(prev)
{
cur= prev->next;
prev2=prev;
while(cur)
{

if(cur->data<prev->data)
{
prev2->next=cur->next;
if(prev==*headPtr)
{
cur->next=*headPtr;
*headPtr=cur;
}
else
{
cur->next=prev;
q->next=cur;
}
}
prev2=cur;
cur=cur->next;

}
q=prev;
prev=prev->next;
}
}

void VisitList(LinkList headPtr)
{
while (headPtr != NULL)
{
printf("%d ", headPtr -> data);
headPtr = headPtr -> next;
}
printf("\n");
}


对不礼貌的女生收钱......
2006-05-31 17:37
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
收藏
得分:0 

老大
真是搞不定了,我可是跟你打招呼让你来看看我的帖子了!!
嘿嘿

奋斗改变一切!!
2006-05-31 21:10
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
收藏
得分:0 
我怎么觉着我写的程序很规范啊,很容易看懂的呀
soft_wind 大哥,下次一定改进

奋斗改变一切!!
2006-05-31 21:15
中国台湾
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-6-1
收藏
得分:0 
上次写的单链表

#include"stdio.h"
#include"malloc.h"
#include <stdlib.h>
#define N 10 /*代表要处理的元素个数 可以谁使用者的意思修改*/
#define OK 1
#define OVERFLOW 0
typedef int ElemType;
typedef int status;
typedef struct Node
{

ElemType data;
struct Node *next;

}Node,*LinkList;
///////////////////////////////
///////////初始化单链表
///////////////////////////////

status InitLinkList(Node **L)
{
LinkList p, q;
int i;
int k = 0;

*L=(LinkList)malloc(sizeof(Node));
if (*L==NULL)
{
printf("memory allocation failed,goodbye\n");
exit(OVERFLOW);
}

printf("请输入元素个数为%d\n",N); /*元素个数为N*/
(*L)->next = NULL;
p = (*L);

for (i = N; i > 0; i--)
{
q = (LinkList)malloc(sizeof(Node));
if (q == NULL)
{
printf("out of place");
exit(OVERFLOW);
}
scanf("%d",&(q->data));
q->next = NULL;
p->next = q;
p = q;
k++;
}

return OK;
}

///////////////////////////////
//////////对单链表的元素进行排序
///////////////////////////////
status LinkListSort(LinkList *L)
{
Node *p;
int t ;
int i=0;

while (i < (N*(N-1)/2))
{
p = (*L)->next;
while (p->next != NULL) /*N为元素个数 元素要比较N*(N-1)/2次*/
{
if (p->data > p->next->data) /*相互之间换值*/
{
t = p->data;
p->data = p->next->data;
p->next->data = t;
}
p = p->next;
}
i++;
}
return OK;
}

//////////////////////////////
////////////////删除相同的元素
//////////////////////////////
status DeleteSameElement (LinkList *L)
{
LinkList p, k;
int e;

p=(*L)->next;
k = p;
while (p != NULL)
{
e = p->data;
p = p->next;
while (p != NULL)
{
if (e == p->data) /*将相同的元素赋值为0 在下面判断如果元素值为0 释放这个接点*/
{
p->data = 0;
}
p = p->next;
}
k = k->next;
p = k;

}

return OK;

}
/////////////////////////////////////////////////////////////////
///////////////////对单链表中的元素倒置以前写的算法 太臭
//////////////////////////////////////////////////////////////////
///*status LinkListReverse(LinkList *L)
/* {
int a[N] ,i=0,count=0;
LinkList Lb;
Node *p,*q;
p=(*L)->next;
while(p!=NULL)
{
a[i++]=p->data;
p=p->next;
count++;
}

Lb=(LinkList)malloc(sizeof(Node)); /*重新建立一个单链表 将倒置后的元素放在Lb中*/
/* {
if(Lb==NULL)
{
printf("out of place");
exit(OVERFLOW);
}
Lb->next=NULL;
p=Lb;
for(i=count-1;i>=0;i--)
{q=(LinkList)malloc(sizeof(Node));
if(q==NULL)
{
printf("out of place");
exit(OVERFLOW);
}
q->data=a[i];
q->next=NULL;
p->next=q;
p=q;
}
}
p=Lb->next; /*输出倒置后的单链表*/
/*while(p!=NULL)
{
printf("%4d",p->data);
p=p->next;
}

return OK;
}*/
//////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
///////// 对单链表中的元素倒置
////////////////////////////////////////////////////////////////
status LinkListReverse(LinkList *L)
{
LinkList q, p, s;

p = (*L)->next;
q = p->next;
s = q->next;
p->next = NULL;
while( s->next != NULL)
{

q->next = p;
p = q;
q = s;
s = s->next;
}

q->next = p;
s->next = q;

(*L)->next = s;

return OK;

}

/////////////////////
/////////释放接点
////////////////////
status FreeLinkList(LinkList *L)
{
Node *q;

while (L != NULL)
{
q = *L;
*L = q->next;
free(q);
}

return OK;
}


////////////////////////
////////////打印出单链表
////////////////////////
status PrintLinkList(LinkList L)
{
Node *p;

p = L->next;
printf("处理之后的单链表为:");
while (p != NULL)
{
if (p->data == 0)
{
p = p->next;
continue;
}
printf("%4d",p->data);
p = p->next;
}
getchar();

return OK;
}

int main(void) /*菜单*/
{
LinkList L;
int flag;
int select;
int e=0;

while(1)
{
do{
printf("\n 1:对单链表中的元素进行排序\n");
printf("\n 2:删除单链表中相同的元素\n");
printf("\n 3:对单链表中的元素进行倒置\n");
printf("\n 4:释放单链表\n");
printf("\n 5:建立单链表\n");
printf("\n 6:退出\n");
printf("\n 请选择你要执行的语句前的数字\n");
scanf("%d",&select);
if(select==6)
flag=0;
}while (select > 6 && select < 0);

if(flag == 0)
break;

switch(select)
{
case 1:
if (e == 1)
{
LinkListSort(&L);
PrintLinkList(L);
}
else
printf("对不起!您还没建立单链表\n请先建立单链表");
break;

case 2:
if (e == 1)
{
DeleteSameElement(&L);
PrintLinkList(L);
}
else
printf("对不起!您还没建立单链表\n请先建立单链表");
break;

case 3:
if(e == 1)
{
LinkListReverse(&L);
PrintLinkList(L);
}
else
printf("对不起!您还没建立单链表\n请先建立单链表");
break;

case 4:
if (e == 1)
{
FreeLinkList(&L);
e = 0;
}
else
{
printf("对不起!您还没建立单链表\n请先建立单链表");
}
break;

case 5:
if (e == 0)
{
InitLinkList( &L);
e = 1;
}
else
{
printf("你的单链表已经建立了");
}
break;


default:
printf("对不起您选择的数字有误 请重新输入");
break;
}
}

system("pause");
return 0;
}

2006-06-01 12:12
快速回复:[求助]单链表插入排序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017200 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved