数据结构上机试题.docx

上传人:b****7 文档编号:9557547 上传时间:2023-02-05 格式:DOCX 页数:21 大小:68.30KB
下载 相关 举报
数据结构上机试题.docx_第1页
第1页 / 共21页
数据结构上机试题.docx_第2页
第2页 / 共21页
数据结构上机试题.docx_第3页
第3页 / 共21页
数据结构上机试题.docx_第4页
第4页 / 共21页
数据结构上机试题.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据结构上机试题.docx

《数据结构上机试题.docx》由会员分享,可在线阅读,更多相关《数据结构上机试题.docx(21页珍藏版)》请在冰豆网上搜索。

数据结构上机试题.docx

数据结构上机试题

数据结构实验报告

 

姓名:

张盈武

学号:

5

 

数据结构上机试题

一、顺序表的操作

(1)插入元素操作:

将新元素x插入到顺序表a中第i个位置。

(2)删除元素操作:

删除顺序表a中第i个元素。

#include<>

#include<>

#include<>

#defineoverflow0

#definelist_size100

#defineok1

#definemaxsize80

#definelistincrement10

#defineerror1

typedefintelemtype;

typedefstruct

{

int*elem;

intlength;

intlistsize;

}list;

intinit(list&l)

{

=(int*)malloc(maxsize*sizeof(int));

if(!

return(overflow);

=0;

=list_size;

returnok;

}

voidcreate(list*l)

{

inti,n;

printf("创建一个有序表:

\n");

printf("输入元素个数:

");

scanf("%d",&n);

l->length=n;

for(i=0;i

{

printf("输入第%d个元素:

",i+1);

scanf("%d",&l->elem[i]);

printf("\n");

}}

intinsert(list&l,inti,elemtype&e)

{

if(i<1||i>+1)returnerror;

elemtype*q,*p;

q=&[i-1]);

p=&[]);

for(p;p>=q;--p)*(p+1)=*p;

*q=e;

++;

returnok;}

intprintflist(listl)

{

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

{

printf("%d",[i]);}

returnok;}

intdeletelist(list&l,inti,elemtype&e)

{

if((i<1)||(i>)returnerror;

for(i;i<=;i++)[i]=[i+1];

;

returnok;

}

intmain(){

listla;

init(la);

create(&la);

printflist(la);

printf("是否要插入元素:

(输入1为是,0否)");

ints;

scanf("%d",&s);

if(s==1)

{

printf("输入要插入的位置:

");

inti;

scanf("%d",&i);

printf("输入要插入的元素:

");

inta;

scanf("%d",&a);

insert(la,i,a);

}

printflist(la);

printf("是否要删除元素:

(1为是,0为否)");

intn;

scanf("%d",&n);

if(n==1)

{

printf("输入要删除的位置:

");

intm;

scanf("%d",&m);

printf("输入要删除的元素:

");

intw;

scanf("%d",&w);

deletelist(la,n,m);

printflist(la);

}

 

returnok;

}

二、单链表的操作

(1)创建一个带头结点的单链表;

(2)插入元素操作:

将新元素x插入到单链表中第i个元素之后;

(3)删除元素操作:

删除单链表中值为x的元素;

#include<>

#include<>

#include<>

#include<>

#defineerror0

#defineok1

#defineequal1

#defineoverflow-1

#definelist_size100

#definelistincrement10

#definenull0

typedefintelemtype;

typedefstructlnode

{

elemtypedata;

structlnode*next;

lnode*head;

}lnode,*linklist;

 

linklistinit(linklist&head)

{inti=1;

intj;

linklistl;

head=(lnode*)malloc(sizeof(lnode));

head->next=null;

l=head;

do

{

printf("请输入第%d个数:

\n",i);

l=(lnode*)malloc(sizeof(lnode));

scanf("%d",&l->data);

l->next=head->next;

head->next=l;

++i;

printf("还输吗(1位输入;0为不。

)");

scanf("%d",&j);

 

}while(j==1);

returnhead;}

intinsert(linklist&head,inti,inte)

{linklistp=head->next;

intj=0;

while(p&&j

{

p=p->next;

++j;

}

if(!

p||j>i-1)

{

printf("error!

\n");

return0;}

linklists;

s=(linklist)malloc(sizeof(linklist));

s->data=e;

s->next=p->next;

p->next=s;

returnok;

}

intdeletenode(linklist&head,inti,elemtype&e)

{linklists;

s=head->next;

linklistq;

 

intj=0;

while(s->next&&j

{

s=s->next;

++j;

}

if(!

s||j>i-1)

{

printf("该元素不存在!

");

return0;

}

q=s->next;

e=q->data;

s->next=q->next;

free(q);

returnok;

}

intprint(linklist&head)

{linklistl;

l=head->next;

do

{

printf("%d",l->data);

l=l->next;}while(l!

=null);

printf("\n");

returnok;}

main()

{linklistla;

init(la);

print(la);

printf("输入要插入的位置:

\n");

inti;

scanf("%d",&i);

printf("请输入该元素:

\n");

inte;

scanf("%d",&e);

insert(la,i,e);

print(la);

printf("输入要删除的元素位置:

\n");

inta;

scanf("%d",&a);

printf("输入要删除的元素:

\n");

intk;

scanf("%d",&k);

deletenode(la,a,k);

print(la);

}

三、在顺序栈上实现将非负十进制数转换成二进制数。

#include<>

#include<>

#defineok1

#defineerror0

#definenull0

typedefintelemtype;

staticintk=0;

typedefstructsnode

{

elemtypedata;

snode*next;

}snode,*linkstack;

linkstackpush(linkstack&top,elemtypee)

{top=(linkstack)malloc(sizeof(snode));

top->next=null;

snode*p;

p=(snode*)malloc(sizeof(snode));

p=top;

p->data=e;

top->next=p;

returntop;}

linkstackpop(linkstack&top)

 

{

if(!

top->next)

{

printf("error");

returnerror;

}

 

inte=top->data;

linkstackh=top;

top=top->next;

printf("%d",e);

free(h);

returntop;

}

intter(linkstack&top,inti)

{intj=0,f=0;

do{

j=i%2;

i=i/2;

push(top,j);

f++;

}while(i!

=0);

returnok;}

 

main()

{linkstackla;

 

printf("输入一个十进制的数:

\n");

inti;

scanf("%d",&i);

ter(la,i);

pop(la);

pop(la);

}

四、在顺序表中采用顺序查找算法和折半查找算法寻找关键字X在顺序表中的位置。

#include<>

typedefstruct

{

charkey;

intdata;

}sequenlist;

intsequensearch(sequenlistl[],intn,charkey)

{

inti=1;

intposition;

intcounter=1;

while(i<=n)

{

if(l[i-1].key==key)

{

position=i;

break;

}

elseposition=-1;

i++;

counter++;

}

returnposition;

}

voidmain()

{

sequenlists[4];

chartemp;

s[0].key='b';

s[0].data='1';

s[1].key='a';

s[1].data='2';

s[2].key='c';

s[2].data='3';

s[3].key='d';

s[3].data='4';

printf("输入关键字:

(a,b,c,d)\n");

scanf("%c",&temp);

intpos=sequensearch(s,4,temp);

if(pos!

=-1)

printf("该数位置为%d,值为:

%c",pos,s[pos-1].data);

elseprintf("没有");

}

#include<>

#include<>

typedefstruct

{

int*elem;

intlength;

}st;

intsearch(stl,intkey)

{

intlow=1;

intmid;

inthigh=;

while(low<=high)

{

mid=(low+high)/2;

if(key==[mid])

returnmid;

else{

if(key<[mid])

high=mid-1;

elselow=mid+1;

}}

return0;

}

voidmain()

{intkk;

stl;

=(int*)malloc(10*sizeof(int));

=10;

for(inti=0;i<10;i++){

printf("输入第%d个数:

\n",i+1);

scanf("%d",&[i]);}

printf("输入要查找的数:

\n");

scanf("%d",&kk);

intpos=search(l,kk);

if(pos)printf("位置为:

%d,值为:

%d",pos+1,[pos]);

elseprintf("没有");

}

五、将无序数列使用直接插入排序算法和快速排序算法将其排成递增有序数列。

#include<>

voidinputdata(intlist[],intn)

{

printf("输入数据:

\n");

for(inti=0;i

scanf("%d",&list[i]);

}

voidoutputdata(intlist[],intn)

{

printf("当前序列为:

\n");

for(intk=0;k

printf("%d\n",list[k]);

}

voidsort(intlist[],intn)

{

inti,j;

inttemp;

for(i=0;i

{

temp=list[i];

j=i-1;

while(temp

{

list[j+1]=list[j];

j--;

}

list[j+1]=temp;

}

}

voidquicksort(intlist[],intstart,intend)

{

inti=start;

intj=end;

inttemp;

intvalue=list[start];

if(start

{

do

{

while(i<=end&&list[i]<=value)i++;

while(j>start&&list[j]>=value)j--;

if(i

{

temp=list[i];

list[i]=list[j];

list[j]=temp;

}

}while(i

temp=list[start];

list[start]=list[j];

list[j]=temp;

quicksort(list,start,j-1);

quicksort(list,j+1,end);

}

}

voidmain()

{

intnum;

intlist[20];

printf("输入数据长度(少于20)\n");

scanf("%d",&num);

inputdata(list,num);

printf("输入排序方式:

(1为简单排序,2为快速排序)\n");

intk;

scanf("%d",&k);

if(k=1){

sort(list,num);

}else

quicksort(list,0,num-1);

outputdata(list,num);

}

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

当前位置:首页 > 初中教育 > 理化生

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

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