数据结构

合并两个线性表程序

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define  ElemType int
#define OVERFLOW -2
#define ERROR -1
#define OK 1
#define n 6
#include<stdio.h>
#include<stdlib.h>
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
bool InitList(SqList &L);
void MergeList(SqList La,SqList Lb,SqList &Lc);
void main()
{
SqList La,Lb,Lc;
InitList(La);
InitList(Lb);
//InitList(Lc);
for(int i=0;i<n;++i)
{
La.elem[i]=i*3+2;
++La.length;
Lb.elem[i]=i*2+8;
++Lb.length;
}
MergeList(La,Lb,Lc);
for(int j=0;j<2*n;++j)
printf("%d/n",Lc.elem[j]);
}
bool InitList(SqList &L)
{
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
void MergeList(SqList La,SqList Lb,SqList &Lc)
{
int *pa,*pb,*pc;
pa=La.elem;
pb=Lb.elem;
Lc.listsize=Lc.length=La.length+Lb.length;
pc=Lc.elem=(ElemType *)malloc(Lc.listsize*sizeof(ElemType));
if(!Lc.elem)
exit(OVERFLOW);
while(pa<=La.elem+La.length-1&&(pb<=Lb.elem+Lb.length-1))
{
if(*pa<*pb)
{
*pc=*pa;
pa++;
pc++;
}
else
{
*pc=*pb;
pb++;
pc++;
}
}
while(pa<=La.elem+La.length-1)
{
*pc=*pa;
pc++;
pa++;
}
while(pb<=Lb.elem+Lb.length-1)
{
*pc=*pb;
pc++;
pb++;
}
//return OK;
}

 

线性表顺序结构程序

#include<stdio.h>
#include<stdlib.h>
//#include   <iostream.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OK 1
#define OVERFLOW -2
#define ERROR -1
#define ElemType int
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
bool InitList(SqList &L);
bool ListInsert(SqList &L,int i,ElemType e);
bool ListDelete(SqList &L,int i,ElemType &e);
//bool ListCreate(int n);
//int equal(int a,int b);
int LocateElem(SqList &L,ElemType e);
void main()
{
SqList L;
int e;
int locate;
//ListCreate(6);
InitList(L);
for(int i=0;i<5;++i)
{L.elem[i]=(i+3)*4;
++L.length;
}
//for(int j=0;j<5;++j)
//printf("%d/n",L.elem[j]);
ListInsert(L,3,78);
//ListDelete(L,2,e);
//printf("%d/n",e);
for(int k=0;k<6;++k)
printf("%d/n",L.elem[k]);
ListDelete(L,5,e);
printf("%d/n",e);
for(int j=0;j<5;++j)
printf("%d/n",L.elem[j]);
locate=LocateElem(L,78);
printf("%d/n",locate);
}
bool InitList(SqList &L)
{
 
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
bool ListInsert(SqList &L,int i,ElemType e)
{
 int *q,*p,*newbase;
if(i<1||i>L.length+1)
return ERROR;
if(L.length>=L.listsize)
{
newbase=(ElemType*)realloc(L.elem,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
L.elem=newbase;
L.listsize+= LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
bool ListDelete(SqList &L,int i,ElemType &e)
{
 int *p,*q;
 if(i<1||i>L.length)
  return ERROR;
 p=&(L.elem[i-1]);
 e=*p;
 q=L.elem+L.length-1;
 for(++p;p<=q;++p)
  *(p-1)=*p;
 --L.length;
 return OK;
}

/*SqList ListCreate(int n)
{
SqList L;
InitList(L);
for(int i=0;i<n;++i)
{
scanf("%d",L.elem);
++L.length;
}
return L;
}*/
/*int equal(a,b)
{
//int a,b;
if(a!=b)
return 0;
else
return 1;
}*/
int LocateElem(SqList &L,ElemType e)
{
int i=1;
int *p;
p=L.elem;
while(i<=L.length&&*(p++)!=e)
++i;
if(i<=L.length)
return i;
else
return 0;
}

 

线性表的链式结构程序

 

#define ElemType int
#define ERROR -2
#define OK 1
//#define n  5
#define OVERFLOW -1
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
#include<stdio.h>
#include<stdlib.h>
LinkList CreateList(int n);
int GetElem(LinkList L,int i,ElemType &e);
bool InsertElem(LinkList &L,int i,ElemType e);
bool DeleteElem(LinkList &L,int i,ElemType &e);
void main()
{
LinkList L;
int e,m;
//m=100;
LNode *r;
L=CreateList(5);
r=L->next;
for(int j=0;j<5;++j)
{
printf("%d/n",(r->data));
r=r->next;
}
//InsertElem(L,2,190);
/*GetElem(L,2,e);
printf("%d/n",e);
InsertElem(L,2,190);
r=L->next;
for(int k=0;k<6;++k)
{
printf("%d/n",r->data);
r=r->next;
}*/
DeleteElem(L,4,m);
printf("%d/n",m);
r=L->next;
for(int k=0;k<4;++k)
{
printf("%d/n",r->data);
r=r->next;
}
}
LinkList CreateList(int n)
{
LinkList L;
LNode *s,*r;
L=(LinkList)malloc(sizeof(LNode));
if(!L)
exit(OVERFLOW);
r=L;
r->next=NULL;
for(int i=0;i<n;++i)
{
s=(LNode *)malloc(sizeof(LNode));
scanf("%d",&(s->data));
r->next=s;
r=s;
r->next=NULL;
}
return L;
}
int GetElem(LinkList L,int i,ElemType &e)
{
LNode *p;
int j;
p=L->next;
j=1;
if(!p||j>i)
return ERROR;
while(p&&j<i)
{
p=p->next;
++j;
}
e=p->data;
return OK;
}
bool InsertElem(LinkList &L,int i,ElemType e)
{
LNode *s,*p;
int j=0;
p=L;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return ERROR;
s=(LinkList)malloc(sizeof(LNode));
if(!s)
exit(OVERFLOW);
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
bool DeleteElem(LinkList &L,int i,ElemType &e)
{
LNode *s,*p;
int j=1;
p=L->next;
while(p&&j<i-1)
{
p=p->next;
++j;
}
s=p->next;
p->next=p->next->next;
e=s->data;
free(s);
return OK;
}

逆序建立线性链表

 

#define ElemType int
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
#include<stdio.h>
#include<stdlib.h>
LinkList CreateList(LinkList &L,int n);
void main()
{
LinkList L;
LNode *p;
CreateList(L,5);
p=L->next;
for(int i=0;i<5;++i)
{printf("%d/n",p->data);
p=p->next;
}
}
LinkList CreateList(LinkList &L,int n)
{
  LNode *p;
 L=(LNode *)malloc(sizeof(LNode));
 L->next=NULL;
 for(int i=n;i>0;--i)
 {
 p=(LNode *)malloc(sizeof(LNode));
 scanf("%d",&p->data);
 p->next=L->next;
 L->next=p;
 }
 return L;
}

合并两个线性链表

#define ElemType int
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
#include<stdio.h>
#include<stdlib.h>
LinkList CreateList(LinkList &L,int n);
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc);
void main()
{
LinkList La,Lb,Lc;
LNode *p;
CreateList(La,5);
CreateList(Lb,8);
//p=La->next;
/*for(int i=0;i<5;++i)
{printf("%d/n",p->data);
p=p->next;
}*/
MergeList(La,Lb,Lc);
p=La->next;
for(int i=0;i<13;++i)
{printf("%d/n",p->data);
p=p->next;
}
}
LinkList CreateList(LinkList &L,int n)
{
  LNode *p,*s;
 L=(LNode *)malloc(sizeof(LNode));
 s=L;
 L->next=NULL;
 for(int i=0;i<n;++i)
 {
 p=(LNode *)malloc(sizeof(LNode));
 scanf("%d",&p->data);
 s->next=p;
 s=p;
 s->next=NULL;
 }
 return L;
}
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc)
{
LNode *pa,*pb,*pc;
pa=La->next;
pb=Lb->next;
Lc=pc=La;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
if(pa)
{
pc->next=pa;
}
if(pb)
{
pc->next=pb;
}
free(Lb);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值