哈工大数据结构与算法作业1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

哈工大数据结构作业1

4.

/*升序创建两个含有整形数据的链表,其中Create函数中调用Insert函数实现升序排列。再通过Combine函数将两个链表合并,用Print函数输出。代码如下。*/

#include "stdafx.h"

#include

struct node {

int data ;

struct node *next ;

} ;

using namespace std;

node* Insert(node *head,node *n)

/*数据插入,升序排列*/

{

node *p1,*p2;p1=p2=head;

if(head==NULL)

{

head=n;n->next=NULL;

return head;

}

if(head->data>=n->data) //新结点插入首结点之前

{

n->next=head;head=n;

return head;

}

//在首结点之后寻找位置插入新结点

while(p2->next&&p2->datadata)

{p1=p2;p2=p2->next;}

if(p2->datadata)

{p2->next=n;n->next=NULL;}

else

{n->next=p2;p1->next=n;}

return head;

}

/*创建有序链表*/

node * Create(void)

{

node *head,*n;

int a ;

head=NULL;

cout<<"升序插入法产生链表,请输入数据(-1结束):\n";

for(cin>>a;a!=-1;cin>>a)

{

n=new node;

n->data=a;

head=Insert(head,n);}

return head;

}

void Print( node *head)

{

cout<<"链表的结点数据(升序)为:\n";

while(head)

{

cout<data<<'\t';

head=head->next;

}

}

node * Combine(node *p,node *q)

{ node *hc,*pc;

node *pa,*pb;

pa=p->next;pb=q->next;

hc=pc=p;

while(pa&&pb)

{

if(pa->data<=pb->data){

pc->next=pa;pa=pa->next;pc=pc->next;

}

else {pc->next=pb;pb=pb->next;pc=pc->next;}

}

pc->next=pa?pa:pb;

return hc;

}

int main()

{

node *ha,*hb,*hc;

cout<<"链表a添加数据\n";

ha=Create();

cout<<"链表b添加数据\n";

hb=Create();

Print(ha);

Print(hb);

hc=Combine(ha,hb);

Print(hc);

return 0;

}

8.

XSXXXSSSXXSXXSXXSSSS

15.

//设置链表结点:

struct celltype

{

Elementtype element;

celltype *next;

int a; //在结点中设置一个int型a来表示链表元素总数

};

/*顺时针方向查找:即为普通单向链表的查找。

逆时针方向查找:通过顺时针转一圈来达到,代表元素总数的整型a就决定了(p=p->next)的循环次数。*/

18.

void Locate ( node *head,elementtype x )

/*数据查找*/

{

node *p=head,*q;

int i=1;

while(p->data!=x&&p->next!=NULL)

{p=p->next;

i++;

}

if(p->data==x)

{cout<<"此数据在第"<

else

{

cout<<"无此数据,插在末尾\n";

q=p->next;

q->data=x;

}

}

19.

void Separate(node L,nodet L1,node L2)

{

node *L1,*L2 ;

int n=1,i=0,j=0;

node *p=L->next,*a=L1,*b=L2;

while(p)

{

if(n%2!=0) //奇数位结点录入第一个链表

{

a->next=p;

a=a->next;

n++;

i++;

p=p->next;

}

else{ //偶数位结点录入第二个链表

b->next=p;

b=b->next;

n++;

j++;

p=p->next; }

}

a->next=L1;

b->next=L2;

L1->element=i; //将长度存入各自的头结点L2->element=j;

}

22.

STRING Substr(STRING &S,int m,int n)

{

int i=1,j=0;

R=new STRING;

STRING st=R;

STRING *p=S->link;

int len=Len(S);

if(n>len||n<=0)

return NULL;

while(p&&i<=m)//p指向第m位

{

p=p->link;

i++;

}

while(p&&j

{

相关文档
最新文档