主题:[讨论]哪位大侠帮帮我这个菜鸟解决一下这个问题?(数据结构)
修改下列程序,要求
1.利用起泡排序法排序,并显示结果。
2.利用选择排序法排序,并显示结果。
(建立两个单链表分别排序)
#include <cstdlib>
#include<iostream.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
bool InitList_L(LinkList &L)
{
L=(LinkList )malloc(sizeof(LNode));
if (L==NULL)
return false;
L->next=NULL;
return true;
}
bool creat_L(LinkList &L,ElemType a[],int n)
{
bool k;
k=InitList_L(L);
if (!k)
return false;
LinkList r=L,p;
for(int i=0;i<n;i++)
{
p=(LinkList )malloc(sizeof(LNode));
p->data=a[i];
p->next=NULL;
r->next=p;
r=p;
}
return true;
}
int ListLength_L(LinkList L)
{
int len=0;
LinkList p=L->next;
while(p!=NULL)
{ len++;
p=p->next;
}
return len;
}
bool GetElem_L(LinkList &L,int i,LinkList &p)
{
int j=1;
p=L->next;
while(p!=NULL && j<i)
{ p=p->next;
j++;
}
if(p)
return true;
return false;
}
bool LocateElem_L(LinkList L,ElemType e,LinkList &p)
{
p=L->next;
while(p!=NULL && p->data!=e)
p=p->next;
if(p==NULL)
return false;
return true;
}
bool ListInsert_L(LinkList L,int i,ElemType e)
{
LinkList p,s;
p=L;
int j=0;
while(p!=NULL && j<i-1)
{
p=p->next;
j++;
}
if(p==NULL || j>i-1)
return false;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
bool ListDelete_L(LinkList L,int i,ElemType &e)
{
LinkList p,q;
p=L;
int j=0;
while(p!=NULL && j<i-1)
{
p=p->next;
j++;
}
if(p==NULL || j>i-1)
return false;
q=(LinkList)malloc(sizeof(LNode));
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return true;
}
void show(LinkList &L)
{
LinkList p;
p=L;
for(int i=0;i<ListLength_L(L);i++)
{
p=p->next;
cout<<p->data<<" ";
}
}
void main()
{
LinkList L;
ElemType a[]={15,12,3,46,5,6,2,83,99};
bool k=creat_L(L,a,9);
show(L);
cout<<" ";
}
1.利用起泡排序法排序,并显示结果。
2.利用选择排序法排序,并显示结果。
(建立两个单链表分别排序)
#include <cstdlib>
#include<iostream.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
bool InitList_L(LinkList &L)
{
L=(LinkList )malloc(sizeof(LNode));
if (L==NULL)
return false;
L->next=NULL;
return true;
}
bool creat_L(LinkList &L,ElemType a[],int n)
{
bool k;
k=InitList_L(L);
if (!k)
return false;
LinkList r=L,p;
for(int i=0;i<n;i++)
{
p=(LinkList )malloc(sizeof(LNode));
p->data=a[i];
p->next=NULL;
r->next=p;
r=p;
}
return true;
}
int ListLength_L(LinkList L)
{
int len=0;
LinkList p=L->next;
while(p!=NULL)
{ len++;
p=p->next;
}
return len;
}
bool GetElem_L(LinkList &L,int i,LinkList &p)
{
int j=1;
p=L->next;
while(p!=NULL && j<i)
{ p=p->next;
j++;
}
if(p)
return true;
return false;
}
bool LocateElem_L(LinkList L,ElemType e,LinkList &p)
{
p=L->next;
while(p!=NULL && p->data!=e)
p=p->next;
if(p==NULL)
return false;
return true;
}
bool ListInsert_L(LinkList L,int i,ElemType e)
{
LinkList p,s;
p=L;
int j=0;
while(p!=NULL && j<i-1)
{
p=p->next;
j++;
}
if(p==NULL || j>i-1)
return false;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
bool ListDelete_L(LinkList L,int i,ElemType &e)
{
LinkList p,q;
p=L;
int j=0;
while(p!=NULL && j<i-1)
{
p=p->next;
j++;
}
if(p==NULL || j>i-1)
return false;
q=(LinkList)malloc(sizeof(LNode));
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return true;
}
void show(LinkList &L)
{
LinkList p;
p=L;
for(int i=0;i<ListLength_L(L);i++)
{
p=p->next;
cout<<p->data<<" ";
}
}
void main()
{
LinkList L;
ElemType a[]={15,12,3,46,5,6,2,83,99};
bool k=creat_L(L,a,9);
show(L);
cout<<" ";
}