工大数据结构第二章作业(3)

2019-04-09 14:22

for(;p;p=p->next)

cout<elements<<'\\t'; cout<

cout<<\本次测试的类型为int\LIST L=NULL,L1=NULL,L2=NULL; Read(L1,1);

cout<<\的元素为:\ Write(L1); Read(L2,2);

cout<<\的元素为:\Write(L2);

Merge(L,L1,L2);

cout<<\合并后L的元素为:\Write(L);

/* LIST L=NULL,L1=NULL; read(L); cout<<\原有的元素:\write(L); copy(L1,L);

cout<<\复制之后的元素:\write(L1);

LIST head=NULL; read(head);

cout<<\删除前:\ cout<<\请输入要删除的数据:\Elementtype x; cin>>x;

int m=Delete(head,x); cout<<\删除后:\write(head); if(m==-1)

cout<<\需要删除的数不存在\ else

cout<<\需要删除的数是第\个\ */

} //线性表的数组实现-线性表的合并 #include using namespace std;

#define maxlength 100 typedef int position;//位置类型 typedef int Elementtype;//下标类型 struct LIST {

Elementtype elements[maxlength]; int last;//最后一个元素的下标 };

position End(LIST L)//线性表的长度

{

return (L.last+1); }

void Insert(Elementtype x,position p,LIST &L) //在表L的位置p处插入x {

position q;

if(L.last>=maxlength-1) cout<<\ else if((p>L.last+1) || (p<1))

cout<<\ else

{ for(q=L.last;q>=p;q--)

L.elements[q+1]=L.elements[q]; L.last=L.last+1; L.elements[p]=x; } }

void Delete(position p,LIST &L) //删除位置p处的元素 { position q; i

f((p>L.last+1) || (p<1))

cout<<\ else

{ L.last=L.last-1; for(q=p;q<=L.last;q++) L.elements[q]=L.elements[q+1]; } }

position Locate(Elementtype x,LIST L) //返回x在表L中的位置 { position q;

for(q=0;q

return q; return (L.last+1); //x不存在 }

Elementtype Retrive(position p,LIST L) //返回L中位置为p的元素 { if((p<1) || (p>L.last+1))

{ cout<<\ return -1; }

return L.elements[p];

} //====================================================== //将两个线性表合并

void Merge(LIST &L,LIST L1,LIST L2)

{ position p,p1,p2; position len1=End(L1);//L1的长度 position len2=End(L2);//L2的长度 L.last=len1+len2-1;//合并后L的最后一个元素的位置 p=p1=p2=0

for(;p1

{ L.elements[p]=L1.elements[p1]; p++; p1++; } for(;p2

{ L.elements[p]=L2.elements[p2]; p++; p2++; } }

void Read(LIST &L,int i) //输入线性表 {

cout<<\请输入第\个线性表的长度:\ cout<<\请输入第\个线性表的元素:\

for(position p=0;p<=L.last;p++) cin>>L.elements[p]; }

void Write(LIST L) //输出线性表

{ cout<<\线性表的长度为:\线性表的元素为:\ for(position p=0;p<=L.last;p++) cout<

void main() {

cout<<\本次测试的类型为int\ LIST L,L1,L2; Read(L1,1); Read(L2,2);

Merge(L,L1,L2); Write(L); }

六、写出一个将两个静态链表(属于同一个存储池)合并的算法函数:

void Merge(cursor M, cursor N); 合并的方法是将N链表中的所有结点添加到M链表的后面,并将N链表的表头结点添加到空闲结点链表中。 要求:1、定义静态链表的结点的结构以及结点的型SPACE以及位置(position)和游标(cursor)的型。 2、定义静态链表的基本操作:void Initialize(); 初始化,将所有存储池中的结点设置为空闲;cursor GetNode(); 从空闲链中获取一个结点;void FreeNode(cursor q); 将结点q加入到空闲链; void Insert ( elementtype x, position p, cursor M ); 在链表M中的位置为p的元素后面添加一个值为x的结点;void Delete (cursor M, position p ); 在链表M中删除位置为p的元素的后一个元素。 3、在1、2的基础上完成本题。

4,在main函数中进行测试:先构建一个存储池,然后在该存储池中创建两个静态表,最后将这两个静态表合并。

#include using namespace std;

#define maxsize 100 typedef int elementtype;

typedef struct { elementtype element int next } spacestr; /*结点类型*/

spacestr SPACE[ maxsize ] /*存储池*/ typedef int position, cursor;

cursor available;/* 标识线性表/空闲池*/ void Initialize() { int j; /* 依次链接池中结点*/ for (j=0; j

SPACE[j].next=-1;/* 最后一个接点指针域为空*/

available=0;/* 标识线性表,将所有存储池中的结点设置为空闲,avilable为头结点,不利用*/ } // 可用空间的分配操作,从空闲链中获取一个结点 cursor GetNode() // q=new spacest { cursor p;

if (SPACE[available].next ==-1) p=-1; else {

p= SPACE[available].next

SPACE[available].next = SPACE[ p ].next }

return p; }/* 将空闲池头结点的下一个节点从空闲池中删除*/ void FreeNode(cursor q) //delete q; {

SPACE [ q ].next =SPACE[available].next

SPACE[available].next = q }/* 将q指向的节点放回池中*/ // 在位置p后面插入元素值为x的结点

void Insert ( elementtype x, position p) {

position q q = GetNode( ) SPACE[ q ].element = x

SPACE[ q ].next = SPACE[ p ].next SPACE[ p ].next = q } // 删除位置p后的一个结点 void Delete ( position p) {

position q;

if ( SPACE[ p ].next != -1 ) {

q = SPACE[ p ].next ;

SPACE[ p ].next = SPACE[ q ].next ;

FreeNode( q ) }

} //创建静态链表 void Create(cursor M) {

elementtype input;

position p = M; while(1) {

cout<<\请输入静态链表的值,输入-1结束:\ cin>>input; if(input != -1) { I

nsert(input,p);

p = SPACE[p].next;

}

else break; }

}

void Merge(cursor M,cursor N) //连接两个链表,将N链表中的所有结点添加到M链表的后面,并将N链表的表头结点添加到空闲结点链表中 {

position p; p=M;

while(SPACE[p].next!=-1) p=SPACE[p].next; position q;

q=SPACE[N].next; SPACE[p].next=q; FreeNode(N);

} //输出静态链表 void Print(cursor M) { position p; p = M;

while(SPACE[p].next != -1)

{ cout<

spacestr s; Initialize();

position p=GetNode(); cursor M=GetNode(); SPACE[M].next = -1; cursor N=GetNode(); SPACE[N].next = -1;

cout<<\创建静态链表M:\Print(M);

cout<<\创建静态链表N:\ Create(N); Print(N);

cout<<\将M和N合并后:\


工大数据结构第二章作业(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国宠物食品市场调查分析报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: