#include <stdio.h>//注意放在c++中
#include <stdlib.h>
#include <string.h>
typedef struct as{
int date;
struct as *next;
}*linklist,lnode;
void init(linklist &l)
{
l=(linklist)malloc(sizeof(lnode));
l->next=NULL;
}
void build(linklist &l,int n)//尾插法
{
linklist p,q;
q=l;
int i;
for(i=1;i<=n;i++)
{
p=(linklist)malloc(sizeof(lnode));
p->next=NULL;
scanf("%d",&p->date);
q->next=p;
q=p;
}
}
void release(linklist &l)//将链表中数值逆置
{
linklist p,q;
p=l->next;
l->next=NULL;
while(p!=NULL)
{
q=p->next;
p->next=l->next;
l->next=p;
p=q;
}
}
void shuchu(linklist &l)
{
linklist p;
p=l->next;
while(p->next!=NULL)
{
printf("%d ",p->date);
p=p->next;
}
printf("%d\n",p->date);
}
void combine(linklist &la,int na,linklist &lb,int nb,linklist &lc)//合并顺序链表
{
linklist pa,pb,pc;
pa=la->next;
pb=lb->next;
pc=lc;
while(pa!=NULL&&pb!=NULL)
{
if(pa->date<pb->date)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
if(pa==NULL)
{pc->next=pb;}
else
{pc->next=pa;}
}
//删除链表中大于min,小于max的数
void delet(int min,int max,linklist &l)
{
linklist p,q,a;
q=l;
p=l->next;
while(p!=NULL&&p->date<=min)
{
q=q->next;
p=p->next;
}
a=l->next;
while(a!=NULL&&a->date<max)
{
a=a->next;
}
q->next=a;
}
//从大到小的单循环插入一个数
void ch(int k,linklist &l)
{
linklist p,q,m;
q=l;
p=l->next;
m=(linklist)malloc(sizeof(lnode));
m->date=k;
m->next=NULL;
while(p!=NULL&&p->date<k)
{
q=q->next;
p=p->next;
}
q->next=m;
m->next=p;
}
int main()
{
linklist l,la,lb,lc;
int na,nb,n;
init(l);
scanf("%d",&n);
build(l,n);
delet(1,3,l);//3.删除范围里的数
ch(5,l);//保持顺序不变插入
release(l);//1.逆置
shuchu(l);
scanf("%d%d",&na,&nb);
init(la);
init(lb);
build(la,na);
build(lb,nb);
init(lc);
combine(la,na,lb,nb,lc);//2.顺序合并
shuchu(lc);
return 0;
}
数据结构——链表(几个拓展的做法)
最新推荐文章于 2021-12-21 23:22:19 发布