#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct Node{
ElemType date;
struct Node *next;
}LinkList,*List;
/*void CreateListF(List *L){ //头插法
int x;
LinkList *s;
*L=(LinkList*)malloc(sizeof(LinkList));
(*L)->next=NULL;
while(scanf("%d",&x)){
if(x==0)
break;
s=(LinkList*)malloc(sizeof(LinkList));
s->date=x;
s->next=(*L)->next;
(*L)->next=s;
}
}
void CreateListR(List *L){ //尾插法
LinkList *r,*s;
*L=(LinkList*)malloc(sizeof(LinkList));
(*L)->next=NULL;
r=*L;
int x;
while(scanf("%d",&x)){
if(x==0)
break;
s=(LinkList*)malloc(sizeof(LinkList));
s->date=x;
// s->next=r->next;
r->next=s;
r=s;
}
r->next=NULL;
}*/
void CreateListF(List &L){ //头插法
int x;
LinkList *s;
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
while(scanf("%d",&x)){
if(x==0)
break;
s=(LinkList*)malloc(sizeof(LinkList));
s->date=x;
s->next=L->next;
L->next=s;
}
}
void CreateListR(List &L){ //尾插法
LinkList *r,*s;
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
r=L;
int x;
while(scanf("%d",&x)){
if(x==0)
break;
s=(LinkList*)malloc(sizeof(LinkList));
s->date=x;
// s->next=r->next;
r->next=s;
r=s;
}
r->next=NULL;
}
void Insert(List &L,int i,int x){
LinkList *p=L,*s;
int j;
for(j=0;j<i;j++){
p=p->next;
}
if(p==NULL){
printf("error!");
}
else{
s=(LinkList*)malloc(sizeof(LinkList));
s->date=x;
s->next=p->next;
p->next=s;
}
}
void Delete(List &L,int i,ElemType &e){
int j=0;
LinkList *p=L,*q;
while(j<i&&p!=NULL){
j++;
p=p->next;
}
if(p==NULL){
printf("error!");
}
else{
q=p->next;
if(q==NULL){
printf("error!");
}
e=q->date;
p->next=q->next;
free(q);
}
}
void Reverse(LinkList *L){
LinkList *p=L->next,*q;
L->next=NULL;
while(p!=NULL){
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
}
void Merge(LinkList *La,LinkList *Lb){
LinkList *pa,*pb,*pc;
pa=La->next;
pb=Lb->next;
pc=La;
free(Lb);
while(pa&&pb){
if(pa->date<pb->date){
pc->next=pa;
pc=pa;
pa=pa->next;
}
else{
if(pa->date=pb->date){
pc->next=pa;
pc=pa;
pa=pa->next;
pb=pb->next;
}
else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
if(pa){
pc->next=pa;
}else{
pc->next=pb;
}
}
}
void DispList(LinkList *L){
LinkList *p=L->next;
while(p!=NULL){
printf("%d ",p->date);
p=p->next;
}
printf("\n");
}
int main(){
List La,Lb;
printf("请输入list1数据, 以0结束!\n");
CreateListR(La);
printf("链表的元素有:\n");
DispList(La);
printf("请输入list2数据, 以0结束!\n");
CreateListR(Lb);
printf("链表的元素有:\n");
DispList(Lb);
Merge(La,Lb);
printf("融合后的表:\n");
DispList(La);
/* int i,x;
List list;
printf("请输入数据, 以0结束!\n");
CreateListR(list);
printf("链表的元素有:\n");
DispList(list);
Reverse(list);
printf("倒置后的表:\n");
DispList(list);
printf("请输入要插入位置:\n");
scanf("%d", &i);
printf("请输入要插入数据:\n");
scanf("%d",&x);
printf("插入后的表:\n");
Insert(list,i,x);
DispList(list);
printf("请输入要删除位置:\n");
scanf("%d", &i);
Delete(list,i,x);
printf("删除后的表:\n");
DispList(list);*/
return 0;
}
单链表基本操作
最新推荐文章于 2021-10-29 15:27:04 发布