数据结构上机试题Word格式文档下载.docx
《数据结构上机试题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构上机试题Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
voidmain()
sqlist a;
//线性表为a
inti,e,x,n,j,s;
//i插入位置,e动态建线性表要用,X插入元素,n表长
init(a);
//构造一个空表
cout〈<
”输入表长n:
”;
cin〉>
n;
”输入表长为”<
<n〈<" 个数:
"
;
for(j=0;
j〈n;
++j)
{
cin>
>
e;
insert(a,j,e);
}
cout<
〈”插入前:
;
for(j=0;
j<
a.length;
j++)
ﻩcout〈〈a.data[j]<〈"";
cout<<
”输入要插入位置i:
"
cin>>i;
cout<
<
"
输入要插入的元素x:
"
cin〉〉x;
cout<
打算在第”〈〈i<<
”个位置插入元素"<
〈x;
insert(a,i-1,x);
//由于从0开始,要构造显示从一开始,所以减1
cout<
〈"插入后结果:
";
for(j=0;
j〈a.length;
ﻩcout〈<a.data[j]〈<
”;
cout<
〈"
输入要删除的位置s:
cin>
〉s;
deleted(a,s-1);
//由于从0开始,要构造显示从一开始,所以减1
cout〈<
”删除后结果:
";
for(j=0;
a.length;
cout<
a。
data[j]<<
” ";
二、单链表的操作
(1)创建一个带头结点的单链表;
(2)插入元素操作:
将新元素x插入到单链表中第i个元素之后;
(3)删除元素操作:
删除单链表中值为x的元素;
#include<iostream。
h>
#include<stdlib.h>
typedef structLNode
ﻩintdata;
ﻩstructLNode*next;
}LNode;
//创建一个带头结点的长度长度长度为n的链表L;
voidcreatelist(LNode *&
L,intn)
inti;
ﻩLNode*p;
ﻩL=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
ﻩfor(i=1;
i〈=n;
i++)
ﻩﻩp=(LNode*)malloc(sizeof(LNode));
ﻩcout〈<
”请输入链表第”〈<
i<
<"
个元素"
ﻩcin〉〉p->
data;
ﻩﻩp-〉next=L—>next;
L—〉next=p;
ﻩ}
//插入元素操作:
将新元素x插入到单链表L中第i个元素之后
void insert(LNode*&
L,int i,int x)
intj=0;
ﻩLNode*p,*q;
ﻩp=L;
while(p->next!
=NULL)
j++;
ﻩif(j==i)
ﻩ{
ﻩq=(LNode *)malloc(sizeof(LNode));
//找到位置
ﻩﻩq—〉data=x;
//放入数据
q->next=p-〉next;
ﻩﻩp-〉next=q;
ﻩﻩbreak;
}
p=p—>next;
}
ﻩif(p->next==NULL)
ﻩ{
ﻩﻩq=(LNode *)malloc(sizeof(LNode));
//找到位置
ﻩﻩq-〉data=x;
ﻩq->
next=p-〉next;
ﻩﻩﻩp—〉next=q;
//删除元素操作:
删除单链表中值为x的元素;
voiddeleted(LNode*&L,intx)ﻩ
ﻩLNode*p,*q;
p=L;
ﻩwhile(p—>next!
=NULL)
{
ﻩif(p->
next-〉data==x)
{
ﻩq=p->
next;
ﻩ
ﻩp->
next=p->
next—>
next;
free(q);
ﻩﻩ}
p=p->
next;
void print(LNode*&L)
LNode *p;
ﻩp=L->next;
ﻩwhile(p!
ﻩﻩcout<<
p->data<
"
ﻩp=p->next;
voidmain()
LNode *L,*p;
//节点为L
inti,x,y,s,n;
//i插入位置,X插入元素,y为删除元素,n表长
cout<〈"输入表长 n:
ﻩcin〉>
n;
ﻩcreatelist(L,n);
ﻩcout〈<
”输出插入之前:
print(L);
cout<〈”请输入插入的位置i:
ﻩcout<〈"请输入插入的元素x:
cin>
〉x;
ﻩinsert(L,i,x);
cout〈〈"输出插入后:
”;
print(L);
cout<
〈”请输入删除的元素y:
y;
deleted(L,y);
删除单链表中值为y的元素;
cout<<
”输出删除后:
ﻩprint(L);
三、在顺序栈上实现将非负十进制数转换成二进制数
#include〈iostream.h>
#include<
stdlib。
#define MAX 100
//在顺序栈上实现将非负十进制数x转换成二进制数
void conversion(int &
x)
ﻩintstack[MAX];
ﻩint top=—1;
ﻩintt;
ﻩwhile(x)
ﻩ{
stack[++top]=x%2;
ﻩﻩx=x/2;
while(top!
=-1)
ﻩt=stack[top-—];
ﻩcout〈〈t;
voidmain()
ﻩint x,t;
ﻩcout<
”请输入你要转换的非负十进制数x:
”〈<endl;
cin〉>
x;
ﻩcout<〈”输出转换后的二进制数:
”;
ﻩconversion(x);
cout〈<endl;
四、在顺序表中采用顺序查找算法和折半查找算法寻找关键字X在顺序表中的位置.
#include〈iostream.h〉
#include<
stdlib.h>
#defineMAX100
//在顺序表中采用顺序查找算法和折半查找算法寻找关键字X在顺序表中的位置
typedefstruct
ﻩint data[MAX];
intlength;
}sqlist;
void init(sqlist&
a.length=0;
voidinsert(sqlist&a,inti,int x)//插入元素操作
intj;
if(i〈0||i>
length+1||a.length==100)
;
ﻩelse{
ﻩfor(j=a.length+1;
j>i;
j-—)
ﻩa.data[j]=a.data[j-1];
a.data[j]=x;
ﻩa.length++;
}
intsearch(sqlist &
sq,int x)//顺序查找算法
int i;
for(i=0;
sq。
length;
i++)//顺序表存储从0开始
ﻩif(sq。
data[i]==x)
ﻩﻩreturn i;
inthsearch(sqlist&sq,int low,inthigh,intx)//折半查找算法
ﻩintmid;
ﻩwhile(low〈=high)
ﻩﻩmid=(low+high)/2;
ﻩﻩif(sq。
data[mid]==x)
return mid;
ﻩelse if(sq。
data[mid]>
x)
ﻩﻩhigh=mid-1;
ﻩelseif(sq。
data[mid]<x)
ﻩlow=mid+1;
void main()
sqlistsq;
//线性表为sq
inti,e,x,y,n;
//i插入位置,x,y要查找元素,n表长
init(sq);
//构造一个空表
cout〈<
"输入表长 n:
”;
cin>>
cout<〈”输入表长为"
<<
n〈<"
个数:
";
for(i=0;
n;
i++)
ﻩcin>>e;
insert(sq,i,e);
cout<
查找前(便于判断):
”<
<endl;
for(i=0;
i〈sq.length;
i++)
ﻩcout〈〈sq。
data[i]〈<
” ”;
cout<<endl;
cout〈<
”采用顺序查找算法:
<<endl;
cout<
endl;
”输入要查找元素关键字x";
ﻩcin〉〉x;
cout〈〈endl;
cout〈〈”关键字"
〈<
x〈<
在顺序表中的位置为"
<〈search(sq,x)+1<
endl;
//下表从0开始,+1显示时,转化成从1开始了
cout<〈"
采用折半查找算法:
〈<endl;
cout<〈endl;
输入要查找元素关键字y ";
cin>〉y;
cout〈<endl;
cout<
〈”关键字"
〈y<
〈"在顺序表中的位置为"
〈〈hsearch(sq,1,sq.length,y)+1<〈endl;
五、将无序数列使用直接插入排序算法和快速排序算法将其排成递增有序数列。
#include<
iostream.h>
stdlib.h>
#defineMAX 100
//将无序数列使用直接插入排序算法和快速排序算法将其排成递增有序数列
typedefstruct
intdata[MAX];
ﻩintlength;
}sqlist;
voidinit(sqlist&a)//线性表初始化
a.length=0;
voidinsert(sqlist &
a,inti,intx)// 插入元素,构造无序数列
intj;
if(i〈0||i〉a.length+1||a.length==100)
ﻩ;
else{
ﻩfor(j=a。
length+1;
j>
j--)
data[j]=a。
data[j—1];
ﻩa。
data[j]=x;
ﻩa.length++;
//将哨兵放在a.data[n]中,被排序的记录放在a.data[0。
.n-1]中,直接插入排序算法。
voidinsertsort(sqlist &a)//直接插入排序算法
inti,j;
ﻩint n=a。
length;
ﻩfor(i=n-2;
i〉=0;
i--)
ﻩif(a.data[i]〉a.data[i+1])
ﻩ{
ﻩﻩa.data[n]=a.data[i];
//a.data[n]是哨兵
j=i+1;
ﻩﻩﻩdo{
ﻩﻩa.data[j—1]=a.data[j];
ﻩﻩj++;
ﻩ}while(a.data[j]<
data[n]);
ﻩa.data[j-1]=a。
data[n];
}
intPartition(sqlist &
a,inti,intj)
ﻩintpivot=a。
data[i];
ﻩwhile(i〈j)
ﻩ{
ﻩﻩwhile(i<
j&&a.data[j]>
=pivot)
ﻩﻩﻩj-—;
if(i<
j)
a.data[i++]=a.data[j];
while(i<
j&
&a。
data[i]<=pivot)
i++;
if(i<j)
a.data[j——]=a.data[i];
}
a.data[i]=pivot;
ﻩreturni;
voidQuickSort(sqlist&
a,intlow,inthigh)//快速排序
{
int pivotpos;
//划分后的基准记录的位置
ﻩif(low〈high)
ﻩ{//仅当区间长度大于1时才须排序
pivotpos=Partition(a,low,high);
QuickSort(a,low,pivotpos-1);
QuickSort(a,pivotpos+1,high);
voidmain()
sqlist sq1,sq2;
//线性表为sq1,sq2
int i,e,x,n1,n2;
//n表长
init(sq1);
cout〈<
”输入表长n1:
"
cin>〉n1;
cout〈<"输入表长为"
〈n1〈<
个数:
”;
for(i=0;
i〈n1;
i++)
{
ﻩcin〉〉e;
ﻩinsert(sq1,i,e);
//插入元素,构造无序数列
无序数列为:
"<〈endl;
for(i=0;
i〈sq1.length;
sq1。
data[i]〈<"
cout<
〈endl;
insertsort(sq1);
cout〈<
直接插入排序后数列为:
”〈<endl;
for(i=0;
i〈sq1.length;
ﻩcout〈<sq1.data[i]<<
”"
cout<〈endl;
endl;
cout〈〈endl;
init(sq2);
cout<
输入表长n2:
cin〉>n2;
cout〈〈”输入表长为”<
n2〈<" 个数:
";
for(i=0;
i〈n2;
ﻩcin>>
e;
ﻩ insert(sq2,i,e);
cout<<"
无序数列为:
endl;
i<sq2。
length ;
cout<
sq2。
data[i]〈〈"”;
cout<〈endl;
QuickSort(sq2,0,n2-1);
cout<〈"快速排序后数列为:
"<
endl;
for(i=0;
i<sq2.length;
i++)
ﻩcout〈<
sq2.data[i]〈〈" ";
endl;