线性表的应用(c++实现)
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
typedef struct
{
int *elem;
int length;
}sqlist;
typedef struct lnode
{
int data;
struct lnode *next;
}lnode,*linklist;
void combainshunxubiao(sqlist a,sqlist b,sqlist &c)
{
int i,j,k;
c.length=a.length+b.length;
c.elem=new int[c.length];
while(i<a.length&&j<b.length)
{
if(a.elem[i]<=b.elem[j])
{
c.elem[k]=a.elem[i];
i++,k++;
}
else
{
c.elem[k]=b.elem[j];
j++,k++;
}
}
while (i<a.length)
{
c.elem[k]=a.elem[i];
i++,k++;
}
while (j<b.length)
{
c.elem[k]=b.elem[j];
j++,k++;
}
}
void combainlianbiao(linklist a,linklist b,linklist &c)
{
linklist p,q,r;
p=a->next;
q=b->next;
r=a;
while (p&&q)
{
if(p->data<=q->data)
{
r->next=p;
r=p;
p=p->next;
}
else
{
r->next=q;
r=q;
q=q->next;
}
}
if(p)
r->next=p;
else
{
r->next=q;
}
delete b;
}
void returndanlianbiao(linklist &l)
{
linklist p,q;
p=l->next;
l->next=NULL;
while (p)
{
q=p->next;
p->next=l->next;
l->next=p;
p=q;
}
}
int middlelist(linklist l)
{
linklist f,s;
f=l;
s=l;
while (!f&&f->next!=NULL)
{
f=l->next->next;
s=s->next
}
return s->data;
}
int searchlist(linklist l,int k)
{
linklist f,s;
f=l->next;
s=l->next;
while (!f&&f->next!=NULL)
{
--k;
if (k<=0)
{
s=s->next
}
f=f->next;
}
if(k>0)
return 0;
return s->data;
}
void deletecopylist(linklist &l,int n)
{
linklist p,q;
int x;
p=l;
int *num=new int[n+1];
for(int i=0;i<n+1;i++)
num[i]=0;
while (!p&&p->next!=NULL)
{
x=abs(p->next->data);
if(num[x]==0)
{
num[x]=1;
p=p->next;
}
else
{
q=p->next;
p->next=q->next;
delete q;
}
}
}