哈工大数据结构与算法作业1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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->data
{p1=p2;p2=p2->next;}
if(p2->data
{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<
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 {