内蒙古科技大学 经管学院 数据结构上机试题.docx
- 文档编号:12579158
- 上传时间:2023-04-20
- 格式:DOCX
- 页数:19
- 大小:135.87KB
内蒙古科技大学 经管学院 数据结构上机试题.docx
《内蒙古科技大学 经管学院 数据结构上机试题.docx》由会员分享,可在线阅读,更多相关《内蒙古科技大学 经管学院 数据结构上机试题.docx(19页珍藏版)》请在冰豆网上搜索。
内蒙古科技大学经管学院数据结构上机试题
内蒙古科技大学
数据结构原理
班级09信管1班
学号
姓名0965138XXX
成绩
一、顺序表的操作
(1)插入元素操作:
将新元素x插入到顺序表a中第i个位置。
(2)删除元素操作:
删除顺序表a中第i个元素。
#include
#include
#defineLIST_INIT_SIZE10
#defineLISTINCREMENT10
#defineERROR0
#defineOK1
#defineOVERFLOW-1
typedefstruct{
int*elem;
intlength;
intlistsize;
}SqList;
intInitList(SqList*L)
{
inti,k;
L->elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!
L->elem)exit(OVERFLOW);
L->length=10;
L->listsize=LIST_INIT_SIZE;
for(i=0;i
{
scanf("%d",&k);
L->elem[i]=k;
}
returnOK;
}
intListInsert(SqList*L,inti,inte)
{int*newbase,*q,*p;
if(i<1||i>L->length+1)returnERROR;
if(L->length>=L->listsize){
newbase=(int*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));
if(!
newbase)exit(OVERFLOW);
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
++L->length;
returnOK;
}
intListDelete(SqList*L,inti,inte){
int*p,*q;
if(i<1||i>L->length)returnERROR;
p=&(L->elem[i-1]);
e=*p;
q=L->elem+L->length-1;
for(++p;p<=q;++p)*(p-1)=*p;
--L->length;
returnOK;
}
intdisplay(SqList*L)
{
inti;
for(i=0;i
{
printf("%d",L->elem[i]);
printf("");
}
returnOK;
}
intmain()
{
SqListL;
chare;
inti,num;
printf("请初始化10个元素:
\n");
InitList(&L);
printf("初始化后");
display(&L);
printf("\n请输入你要删除的元素的位置\n");
scanf("%d",&i);
ListDelete(&L,i,e);
printf("删除后:
\n");
display(&L);
printf("\n请输入插入位置和元素(格式“位置”,“元素”)");
scanf("%d,%d",&i,&num);
ListInsert(&L,i,num);
printf("插入后:
\n");
display(&L);
returnOK;
}
二、单链表的操作
(1)创建一个带头结点的单链表;
(2)插入元素操作:
将新元素x插入到单链表中第i个元素之后;
(3)删除元素操作:
删除单链表中值为x的元素;
#include
#include
#defineNull0
typedefintElement;
typedefstructLNode
{
Elementdate;
structLNode*next;
}LNode,*LinkeList;
LNode*Create(intn)
{
inti;
LNode*head,*now;
head=(LNode*)malloc(sizeof(LNode));
head->next=Null;
for(i=0;i { now=(LNode*)malloc(sizeof(LNode)); scanf("%d",&now->date); now->next=head->next; head->next=now; } returnhead; } intInsertNode(LNode*l,inti,Elemente) { LNode*now=l; intj=0; while(now&&j {now=now->next; j++; } if(! now||j>i-1) { printf("插入位置I不恰当! "); return0; } LNode*s; s=(LNode*)malloc(sizeof(LNode)); s->date=e; s->next=now->next; now->next=s; return1; } intDleteNode(LinkeList&l,inti) { Elemente; LNode*now,*d; intj=0; now=l; while(now->next&&j {now=now->next; j++;} if(! now||j>i-1) { printf(""); return0; } d=now->next; now->next=d->next; e=d->date; free(d); returne; } voidDisplayList(LinkeList&l) { LNode*now; now=l->next; while(now! =Null) { printf("%d",now->date); now=now->next; } } voidmain() { LNode*l; intnum=0,ch=0; printf("输入链表长度: "); scanf("%d",&num); printf("请输入个元素: \n"); l=Create(num); printf("初始化为: "); DisplayList(l); printf("\n请输入插入位置和元素(格式“位置”,“元素”)"); scanf("%d,%d",&num,&ch); if(InsertNode(l,num,ch))printf("\n插入后为: "); DisplayList(l); printf("\n请输入删除位置: "); scanf("%d",&num); printf("\n第%d个位置元素为“%d”\n删除后为: ",num,DleteNode(l,num)); DisplayList(l); } 三、在顺序栈上实现将非负十进制数转换成二进制数。 #include #include #defineMAX30 typedefstruct { intsize; int*base,*top; }SqStack; intInitStack(SqStack&s) { s.base=(int*)malloc(MAX*sizeof(int)); if(! s.base)return0; s.top=s.base; s.size=MAX; return1; } intPush(SqStack&s,inte) { if(s.top-s.base>s.size) { s.base=(int*)realloc(s.base,(s.size+10)*sizeof(int)); if(! s.base)return0; s.top=s.base+s.size; s.size+=10; } *s.top++=e; return1; } intPop(SqStack&s,int&e) { if(s.base==s.top)return0; e=*--s.top; return1; } voidmain() { intnum,k; SqStackl; InitStack(l); while (1) { printf("请输入欲转换的十进制数! "); scanf("%d",&num); while((num/2)! =0||(num)! =1) { Push(l,num%2); num=num/2; } Push(l,num%2); printf("转化结果为: "); while(Pop(l,k))printf("%d",k); printf("\n"); } } 四、在顺序表中采用顺序查找算法和折半查找算法寻找关键字X在顺序表中的位置。 #include #include #defineLIST_INIT_SIZE10 #defineERROR0 #defineOK1 #defineOVERFLOW-1 #defineTYPEint typedefstruct{ TYPE*elem; intlength; intlistsize; }SqList; intInitList(SqList*L) { inti; L->elem=(TYPE*)malloc(LIST_INIT_SIZE*sizeof(TYPE)); if(! L->elem)exit(OVERFLOW); L->length=10; L->listsize=LIST_INIT_SIZE; for(i=0;i { L->elem[i]=i*i; } returnOK; } intSequanceSearch(SqList&l,intn,TYPEc) { inti=1; intposition; while(i { if(l.elem[i-1]==c) {position=i;break;} elseposition=-1; i++; } if(position<=n)returnposition; elsereturnERROR; } intBinSearch(SqList&l,TYPEc) { intlow=0,mid,high=l.length; while(low<=high) { mid=(low+high)/2; if(c==l.elem[mid])returnmid; else { if(c elselow=mid+1; } } returnERROR; } intdisplay(SqList*L) { inti; for(i=0;i { printf("%d",L->elem[i]); printf(""); } returnOK; } intmain() { SqListL; TYPEe; inti ; InitList(&L); printf("初始化顺序表为: "); display(&L); while (1) { printf("\n顺序查找查什么? \n"); scanf("%d",&e); i=SequanceSearch(L,LIST_INIT_SIZE,e); if(i==ERROR)printf("顺序表没有该元素! ! ! \n"); elseprintf("所查元素所在位置为: %d\n",i); printf("\n折半查找查什么? \n"); scanf("%d",&e); i=BinSearch(L,e); if(i==ERROR)printf("顺序表没有该元素! ! ! \n"); elseprintf("所查元素所在位置为: %d\n",i+1); }returnOK; } 五、将无序数列使用直接插入排序算法和快速排序算法将其排成递增有序数列。 #include #defineMAX15 #defineSWAP(x,y){intt;t=x;x=y;y=t;} voidDisplay(inta[],intn) { for(inti=0;i { printf("%d",a[i]); } printf("\n"); } voidInsertSort(inta[],intn) { inti,j,temp;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 内蒙古科技大学 经管学院 数据结构上机试题 内蒙古 科技大学 经管 学院 数据结构 上机 试题