#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreatList(LinkList &L)
//尾插入法
{
LinkList p,q;
int i,n;
printf("请输入数据的个数\n");
scanf("%d",&n);
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
q=L;
printf("请输入%d个数据\n",n);
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
q->next=p;
q=q->next;
}
p->next=NULL;
}
{
LinkList p,q;
int i,n;
printf("请输入数据的个数\n");
scanf("%d",&n);
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
q=L;
printf("请输入%d个数据\n",n);
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
q->next=p;
q=q->next;
}
p->next=NULL;
}
void CreatList2(LinkList &L)
//头插入法
{
LinkList p,q;
int i,n;
printf("请输入数据的个数\n");
scanf("%d",&n);
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
q=L;
printf("请输入%d个数据\n",n);
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=q->next;
q->next=p;
}
}
{
LinkList p,q;
int i,n;
printf("请输入数据的个数\n");
scanf("%d",&n);
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
q=L;
printf("请输入%d个数据\n",n);
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=q->next;
q->next=p;
}
}
void PrintList(LinkList &L)
//链表输出
{
LinkList p;
p=L->next;
printf("链表中的数据为\n");
while(p)
{
printf("%d\t",p->data);
p=p->next;
}
}
{
LinkList p;
p=L->next;
printf("链表中的数据为\n");
while(p)
{
printf("%d\t",p->data);
p=p->next;
}
}
int ListLength(LinkList L)
{
LinkList p;
int n=0;
p=L->next;
while(p)
{
n++;
p=p->next;
}
return n;
}
{
LinkList p;
int n=0;
p=L->next;
while(p)
{
n++;
p=p->next;
}
return n;
}
Status ListInsert(LinkList L,int n,ElemType e)
//元素插入
{
int i;
LinkList p,q;
p=(LinkList)malloc(sizeof(LNode));
p->data=e;
q=L;
for(i=0;i<n-1;i++)
{
q=q->next;
}
p->next=q->next;
q->next=p;
return OK;
}
{
int i;
LinkList p,q;
p=(LinkList)malloc(sizeof(LNode));
p->data=e;
q=L;
for(i=0;i<n-1;i++)
{
q=q->next;
}
p->next=q->next;
q->next=p;
return OK;
}
Status DeletList(LinkList L,int n,ElemType &e)
//元素删除
{
int i;
LinkList p,q;
q=p=L;
for(i=0;i<n-1;i++)
{
p=p->next;
q=q->next;
}
q=q->next;
e=q->data;
p->next=q->next;
}
{
int i;
LinkList p,q;
q=p=L;
for(i=0;i<n-1;i++)
{
p=p->next;
q=q->next;
}
q=q->next;
e=q->data;
p->next=q->next;
}
Status SortList(LinkList &L)
//交换结点
{
LinkList r,q,p,end,temp;
end=NULL;
while(L -> next != end)
{
r=L;
q=r->next;
p=q->next;
while(p!=end)
{
if(q->data>p->data)
{
q -> next = p -> next;
r -> next = p;
p -> next = q;
temp = p;
p = q;
q = temp;
}
r=r->next;
q=q->next;
p=p->next;
}
end =q;
}
return OK;
}
{
LinkList r,q,p,end,temp;
end=NULL;
while(L -> next != end)
{
r=L;
q=r->next;
p=q->next;
while(p!=end)
{
if(q->data>p->data)
{
q -> next = p -> next;
r -> next = p;
p -> next = q;
temp = p;
p = q;
q = temp;
}
r=r->next;
q=q->next;
p=p->next;
}
end =q;
}
return OK;
}
Status SortList2(LinkList &L)
//交换数据
{
LinkList p,q,end;
int t,n=0,i,j;
end=NULL;
p=L->next;
q=p->next;
while(L->next!=end)
{
p=L->next;
q=p->next;
while(q!=end)
{
if(p->data>q->data)
{
t=p->data;
p->data=q->data;
q->data=t;
}
p=p->next;
q=q->next;
}
end=p;
}
return OK;
}
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc) //合并链表
{
LinkList r,q,p;
q=La->next;
p=Lb->next;
r=Lc=La;
while(q!=NULL&&p!=NULL)
{
if(q->data<p->data)
{
r->next=q;
r=r->next;
q=q->next;
}
else
{
r->next=p;
r=r->next;
p=p->next;
}
}
if(q!=NULL)
r->next=q;
else
r->next=p;
}
{
LinkList p,q,end;
int t,n=0,i,j;
end=NULL;
p=L->next;
q=p->next;
while(L->next!=end)
{
p=L->next;
q=p->next;
while(q!=end)
{
if(p->data>q->data)
{
t=p->data;
p->data=q->data;
q->data=t;
}
p=p->next;
q=q->next;
}
end=p;
}
return OK;
}
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc) //合并链表
{
LinkList r,q,p;
q=La->next;
p=Lb->next;
r=Lc=La;
while(q!=NULL&&p!=NULL)
{
if(q->data<p->data)
{
r->next=q;
r=r->next;
q=q->next;
}
else
{
r->next=p;
r=r->next;
p=p->next;
}
}
if(q!=NULL)
r->next=q;
else
r->next=p;
}
int main()
{
int n;
ElemType e;
LinkList La,Lb,Lc;
printf("创建链表La\n");
CreatList(La);
PrintList(La);
n=ListLength(La);
printf("\n该链表的长度为 %d\n",n);
printf("请输入需要插入的位置和数据\n");
scanf("%d %d",&n,&e);
ListInsert(La,n,e);
PrintList(La);
printf("\n请输入需要删除数据的位置\n");
scanf("%d",&n);
DeletList(La,n,e);
PrintList(La);
printf("\n被删除的数据为 ");
printf("\n%d\n",e);
if(SortList(La)!=1)
printf("排序错误");
printf("排序后\n");
PrintList(La);
printf("\n创建链表Lb");
CreatList(Lb);
if(SortList(Lb)!=1)
printf("排序错误");
printf("排序后\n");
PrintList(Lb);
MergeList(La,Lb,Lc);
printf("\n将链表La和Lb合并为Lc\n");
PrintList(Lc);
printf("\n\n\t 杨佳宁创作");
return 0;
}
{
int n;
ElemType e;
LinkList La,Lb,Lc;
printf("创建链表La\n");
CreatList(La);
PrintList(La);
n=ListLength(La);
printf("\n该链表的长度为 %d\n",n);
printf("请输入需要插入的位置和数据\n");
scanf("%d %d",&n,&e);
ListInsert(La,n,e);
PrintList(La);
printf("\n请输入需要删除数据的位置\n");
scanf("%d",&n);
DeletList(La,n,e);
PrintList(La);
printf("\n被删除的数据为 ");
printf("\n%d\n",e);
if(SortList(La)!=1)
printf("排序错误");
printf("排序后\n");
PrintList(La);
printf("\n创建链表Lb");
CreatList(Lb);
if(SortList(Lb)!=1)
printf("排序错误");
printf("排序后\n");
PrintList(Lb);
MergeList(La,Lb,Lc);
printf("\n将链表La和Lb合并为Lc\n");
PrintList(Lc);
printf("\n\n\t 杨佳宁创作");
return 0;
}