数据结构实验课代码.docx

上传人:b****2 文档编号:2368845 上传时间:2022-10-29 格式:DOCX 页数:68 大小:29.63KB
下载 相关 举报
数据结构实验课代码.docx_第1页
第1页 / 共68页
数据结构实验课代码.docx_第2页
第2页 / 共68页
数据结构实验课代码.docx_第3页
第3页 / 共68页
数据结构实验课代码.docx_第4页
第4页 / 共68页
数据结构实验课代码.docx_第5页
第5页 / 共68页
点击查看更多>>
下载资源
资源描述

数据结构实验课代码.docx

《数据结构实验课代码.docx》由会员分享,可在线阅读,更多相关《数据结构实验课代码.docx(68页珍藏版)》请在冰豆网上搜索。

数据结构实验课代码.docx

数据结构实验课代码

//单链表

#include

usingnamespacestd;

#include

classListNode//结点类

{

public:

ListNode*next;

intdata;

ListNode(ListNode*pnext=NULL)

{

next=pnext;

}

ListNode(intitem,ListNode*pnext=NULL)

{

data=item;

next=pnext;

}

~ListNode()

{

}

};

classLinkList//链表类

{

private:

ListNode*head;

intsize;

ListNode*index(inti);

public:

LinkList();

~LinkList();

intlist_size();

intlist_insert(inti,intitem);

intlist_del(inti);

intlist_get(inti);

};

LinkList:

:

LinkList()

{

head=newListNode();

size=0;

}

LinkList:

:

~LinkList()

{

ListNode*p,*q;

p=head;

while(p!

=NULL)

{

q=p;

p=p->next;

deleteq;

}

size=0;

head=NULL;

}

ListNode*LinkList:

:

index(inti)

{

if(i<-1||i>size-1)

{

exit(-1);

}

if(i==-1)

{

returnhead;

}

ListNode*p=head->next;

intj=0;

while(p!

=NULL&&j

{

p=p->next;

j++;

}

returnp;

}

intLinkList:

:

list_size()

{

returnsize;

}

intLinkList:

:

list_insert(inti,intitem)

{

if(i<0||i>size)

{

exit(-1);

}

ListNode*p=index(i-1);

ListNode*q=newListNode(item,p->next);

p->next=q;

size++;

return1;

}

intLinkList:

:

list_del(inti)

{

if(size==0)

{

exit(-1);

}

if(i<0||i>size-1)

{

exit(-1);

}

ListNode*s,*p=index(i-1);

s=p->next;

p->next=p->next->next;

inttemp=s->data;

deletes;

size--;

returntemp;

}

intLinkList:

:

list_get(inti)

{

if(i<0||i>size-1)

{

exit(-1);

}

ListNode*p=index(i);

returnp->data;

}

 

intmain()

{

inti,temp,len,item,inspos,delpos,getpos;

LinkListmy;

cout<<"输入创建链表的长度:

";

cin>>len;

cout<<"输入各数据:

";

for(i=0;i

{

cin>>temp;

my.list_insert(i,temp);

}

for(i=0;i

{

cout<

}

cout<

cout<<"输入查找位置:

";

cin>>getpos;

cout<<"查找到的数据为:

"<

cout<

cout<<"输入插入新结点的位置和数据:

";

cin>>inspos>>item;

my.list_insert(inspos-1,item);//插入新数据

cout<<"新链表为:

";

for(i=0;i

{

cout<

}

cout<

cout<<"输入删除结点的位置:

";

cin>>delpos;

my.list_del(delpos-1);

cout<<"新链表为:

";

for(i=0;i

{

cout<

}

cout<

return1;

}

 

//KMP串

#include

usingnamespacestd;

#include

classString

{

private:

char*str;

intsize;

intmaxSize;

voidGetNext(constString&t,intnext[])const;

intKMPFind(constString&t,intstart,intnext[])const;

public:

String(char*s="");

~String(void);

intKMPFindSubstr(constString&t,intstart)const;

};

String:

:

String(char*s)

{

size=strlen(s);

maxSize=size+1;

str=newchar[maxSize];

strcpy(str,s);

}

String:

:

~String(void)

{

delete[]str;

}

voidString:

:

GetNext(constString&t,intnext[])const

{

ints=t.size;

intj=1,k=0,i;

next[0]=-1;

next[1]=0;

while(j<(t.size-1))

{

if(t.str[j]==t.str[k])

{

next[j+1]=k+1;

j++;

k++;

}

elseif(k==0)

{

next[j+1]=0;

j++;

}

else

k=next[k];

}

for(i=0;i

{

cout<

}

cout<

}

intString:

:

KMPFindSubstr(constString&t,intstart)const

{

intm=t.size;

int*next=newint[m];

GetNext(t,next);

intv=KMPFind(t,start,next);

delete[]next;

returnv;

}

intString:

:

KMPFind(constString&t,intstart,intnext[])const

{

intv,i=start,j=0;

while((i

{

if((j==-1)||(str[i]==t.str[j]))

{

i++;

j++;

}

else

j=next[j];

}

if(j==t.size)

v=i-t.size;

else

v=-1;

returnv;

}

intmain()

{

inttestNo,m;

intindex;

charstr1[80],str2[80];

cin>>testNo;

cin.get();

for(m=0;m

{

cin.getline(str1,80);

cin.getline(str2,80);

Strings1(str1),s2(str2);

index=s1.KMPFindSubstr(s2,0)+1;

cout<

}

return1;

}

//平衡二叉树平衡因子

#include

#include

#include

usingnamespacestd;

intj;

/*

该程序用一维数组来构造一个二叉树,求平衡因子

*/

intDepth(char*c,intn)

{

if(c[n]!

='0')

{

inthl=Depth(c,2*n);

inthr=Depth(c,2*n+1);

returnhl>hr?

hl+1:

hr+1;

}

elsereturn0;

}

//递归求二叉树每个结点的平衡因子

intBalance(char*c,intn)

{

inthl=Depth(c,2*n);

inthr=Depth(c,2*n+1);

returnhl-hr;

}

voidpro(char*c,intn)

{

if(c[n]!

='0')

{

pro(c,2*n);

pro(c,2*n+1);

cout<

}

}

intmain()

{

intx,i=1;

chara[100];

for(i=0;i<100;i++)

a[i]='0';

cin>>x;

for(i=1;i

cin>>a[i];

pro(a,1);

return0;

}

 

//希尔排序

#include

usingnamespacestd;

//希尔排序

voidShellInsert(int*a,intlen,intdk){

inti,j;

for(i=dk+1;i<=len;i++){

if(a[i]

a[0]=a[i];

f

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 教育学心理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1