C++使用链表对数组进行排序问题
哪位好心的大哥大姐可以帮小弟写一个对数组进行冒泡和直接插入排序,要求使用链表来实现的,最好在某些重要的代码后写些注释,这样小弟不懂之处也可以解决下嘛,谢谢啦、、、最好能使...
哪位好心的大哥大姐可以帮小弟写一个对数组进行冒泡和直接插入排序,要求使用链表来实现的,最好在某些重要的代码后写些注释,这样小弟不懂之处也可以解决下嘛,谢谢啦、、、
最好能使用C++来写吧,小弟学的是C++,某些C的符号小弟看不懂。。。 展开
最好能使用C++来写吧,小弟学的是C++,某些C的符号小弟看不懂。。。 展开
2个回答
展开全部
自己写的:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct ListNode
{
int data[10] ;
struct ListNode *next;
}listnode;
listnode *CreateList(int n)
{
int k;
listnode *p,*h;
h = (listnode*)malloc(sizeof(listnode));
if (NULL==h)
{
printf("Can't get the memory!\n");
exit(0);
}
h->data[0]='\0';
p = h;
h->next=NULL;
for (int i=0;i<n;i++)
{
scanf("%d",&k);
h->data[i] = k;
h->next = h->next++;
}
return p;
}
void SortList(int num,listnode *hp)
{
listnode *p,*q;
int temp;
p=hp;
for(int i=0;i<num;i++)
{
for(int i=0;i<num;i++)
{
if (p->data[i]>p->data[i+1])
{
int tmp = 0;
tmp = p->data[i+1];
p->data[i+1] = p->data[i];
p->data[i] = tmp;
}
}
}
}
void OutList(int n,listnode *hp)
{
int i=0;
while (i<n)
{
printf("%d\n",hp->data[i]);
(hp->next)=(hp->next++);
i++;
}
}
void main()
{
int num;
scanf("%d",&num);
listnode *p = CreateList(num);
SortList(num,p);
OutList(num,p);
}
这个是搜的,感觉这个不好,思路不清晰:
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;/*data代表成绩分数*/
struct node *next;
}LNode,*LinkList;
LinkList Creat(void)/*创建链表,结束标志为当输入的数据为0!*/
{
LinkList H,p1,p2;
int n;
n=0;
p1=p2=(LinkList)malloc(sizeof(LNode));
printf("输入数据(输入0结束):\n");
scanf("%d",&p1->data);
H=NULL;
while(p1->data!=0)
{
n=n+1;
if(n==1)
H=p1;
else
p2->next=p1;
p2=p1;
p1=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p1->data);
}
p2->next=NULL;
return(H);
}
LinkList Sort(LinkList SL)/*递增排序函数:入口参数:链表的头指针,此为链表中的排序函数*/
{
LinkList p,q;
int temp;
for(p=SL;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(p->data>q->data)
{
temp=q->data;
q->data=p->data;
p->data=temp;
}
}
}
return SL;
}
int main()
{
LinkList L,S,K;
L=Creat();
printf("初始化的单链表数据序列为:\n");
for(S=L;S!=NULL;S=S->next)
printf("%d ",S->data);
Sort(L);
printf("\n按递增顺序排序后的序列为:\n");
for(K=L;K!=NULL;K=K->next)
printf("%d==>",K->data);
return 0;
}
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct ListNode
{
int data[10] ;
struct ListNode *next;
}listnode;
listnode *CreateList(int n)
{
int k;
listnode *p,*h;
h = (listnode*)malloc(sizeof(listnode));
if (NULL==h)
{
printf("Can't get the memory!\n");
exit(0);
}
h->data[0]='\0';
p = h;
h->next=NULL;
for (int i=0;i<n;i++)
{
scanf("%d",&k);
h->data[i] = k;
h->next = h->next++;
}
return p;
}
void SortList(int num,listnode *hp)
{
listnode *p,*q;
int temp;
p=hp;
for(int i=0;i<num;i++)
{
for(int i=0;i<num;i++)
{
if (p->data[i]>p->data[i+1])
{
int tmp = 0;
tmp = p->data[i+1];
p->data[i+1] = p->data[i];
p->data[i] = tmp;
}
}
}
}
void OutList(int n,listnode *hp)
{
int i=0;
while (i<n)
{
printf("%d\n",hp->data[i]);
(hp->next)=(hp->next++);
i++;
}
}
void main()
{
int num;
scanf("%d",&num);
listnode *p = CreateList(num);
SortList(num,p);
OutList(num,p);
}
这个是搜的,感觉这个不好,思路不清晰:
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;/*data代表成绩分数*/
struct node *next;
}LNode,*LinkList;
LinkList Creat(void)/*创建链表,结束标志为当输入的数据为0!*/
{
LinkList H,p1,p2;
int n;
n=0;
p1=p2=(LinkList)malloc(sizeof(LNode));
printf("输入数据(输入0结束):\n");
scanf("%d",&p1->data);
H=NULL;
while(p1->data!=0)
{
n=n+1;
if(n==1)
H=p1;
else
p2->next=p1;
p2=p1;
p1=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p1->data);
}
p2->next=NULL;
return(H);
}
LinkList Sort(LinkList SL)/*递增排序函数:入口参数:链表的头指针,此为链表中的排序函数*/
{
LinkList p,q;
int temp;
for(p=SL;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(p->data>q->data)
{
temp=q->data;
q->data=p->data;
p->data=temp;
}
}
}
return SL;
}
int main()
{
LinkList L,S,K;
L=Creat();
printf("初始化的单链表数据序列为:\n");
for(S=L;S!=NULL;S=S->next)
printf("%d ",S->data);
Sort(L);
printf("\n按递增顺序排序后的序列为:\n");
for(K=L;K!=NULL;K=K->next)
printf("%d==>",K->data);
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询