1、数据结构上机试题一、顺序表的操作
(1) 插入元素操作:将新元素X插入到顺序表a中第 i个位置。
(2) 删除元素操作:删除顺序表a中第i个元素。
#include
2、l | | a.length==100) else{ cout«n请输入插入的位置i: n; cin>>i; cout«n请输入插入的元素x: ”; cin>>x; insert(L,i,x); cout«"输出插入后:”; print(L); cout«n请输入删除的元素y: cin>>y; deleted(L,y);〃删除元素操作:删除单链表中值为y 的元素; cout<< ”输出删除后:”; print(L);}Bl •C:\DOCUIENTS AND SETTI»GS\ADIINISTRATOR\桌面\ 111111 \Debug\ 111111. exeM
3、 Bl •C:\DOCUIENTS AND SETTI»GS\ADIINISTRATOR\桌面\ 111111 \Debug\ 111111. exeM 12 3 4 5 6 元元元元元; 6个个个个个个 12 3 4 5 6 3 4 5 6 素99 — 元 6 — n表表表表表表之入后后 长链链链链槌链入插入除 交入入入入入插入插删 人出 3 9 9 尸4 兀 5X 2 4 5 9 9 6 2 1请输入插入的位置2 2 1请输入删除的元素9: 3 1 Press any key to continue X三、在顺序栈上实现将非负十进制数转换成二进制数
4、includc
5、换后的二进制数:”; conversion(x);
cout<
6、 init(sqlist &a)〃线性表初始化 a.length=0;}void insert(sqlist &a ,int i,int x)// 插入兀素操作{ int j; if(i<0| | i>a.length+l | | a.length==100) else{ for(j=a.length+l;j>i;j—)a.data[j]=a. data [j -1 ]; a.data[j]=x; a.lcngth++; }}int search(sqlist &sq,int x)〃顺序查找算法{ int i; for(i=0;iVsq.length;i++)〃顺序表存储从
7、 0 开始if(sq.data[i]二二 x)return i;}
int hsearch(sqlist &sq,int low,int high,int x)〃折半查找算 法{
int mid;
while (low<=high)
{mid=(low+high)/2;if(sq.data[mid]==x)return mid;
else if(sq.data[mid]>x) high=mid-l;else if(sq.data[mid] 8、x,y要查找元素,n表长 init(sq);//构造一个空表
coutvv”输入表长n:H;
cin>>n;
cout«H输入表长为H«n«n个数:”; for(i=0;i 9、
cout«n关键字H«X«H在顺序表中的位置为H«search(sq,x)+l«endl; //下表从 0 开始,+1 显示时, 转化成从1开始了
coutVV”采用折半查找算法:H«endl;
cout< 10、输入表长为 10 个数:36 35 29 64 1 85 66 48 25 14 羞找俞(便于判断):
36 35 29 64 1 85 66 48 25 14采用顺序查找算法:
输入要查找元素关键字x 64关键字64在顺匠表中的位置为4采用折半查找算法:
输入要查找元素关键字' 64关键字64在顺序表中的何置为4Press any key to continue五、将无序数列使用直接插入排序算法和快速排序算
法将其排成递增有序数列。
#include 11、序算法将其排成递增有序数列typedef struct
in t data [MAX];
int length;}sqlist;void init(sqlist &a)〃线性表初始化{
a.lcngth=0;}void insert(sqlist &a ,int ijnt x)// 插入元素,构造无序数 列{
int j;
if(i<01 | i>a.length+l | | a.length==100).
clsc{
fbr(j=a.length+1 ;j >i;j—)a.data [j]=a.data[j-l];
a.data[j]=x;
a.length++;
}}〃 12、将哨兵放在a.data[n]中,被排序的记录放在 a.data[O..n-l]中,直接插入排序算法。
void insertsort(sqlist &a)〃直接插入排序算法 {
int i,j;
int n=a.length; for(i=n-2;i>=0;i—)if(a.data[i]>a.data[i+l]){a.datafn]=a.data[i];//a.data[n]是口 肖兵 j=i+l;
do{a.data[j-l]=a.data[j]; j++;
} while(a.data[j] 13、tition(sqlist &a,int i,int j) {
int pivot=a.data[i];
while (i 14、ainQ(
sqlist a;〃线性表为a
int i,e,x,n,j,s;〃i插入位置,e动态建线性表要用,X插 while (i 15、准记录的位置 if(low 16、ert(sql,i,e);〃插入元素,构造无序数列 } cout«"无序数列为:"«endl; for(i=0;i 17、cout«H输入表长为H«n2«n个数:七
for(i=0;i 18、les\licrosoft Visual StudioMyProjects\l 111111111 l\Debu... - [□ X输入表长nl: 5输入表长有5个数:1 9 3 5 7 无序教列为:
1 9 3 5 7直接插入排序后数列为:
1 3 5 7 9费入表长n2:10输入表长为10 个数:1 3 296 34 26 57 2 18 66 14 无序薮列为:
1 3 296 34 26 57 2 18 66 14快速排序后数列为:
1 2 3 14 18 26 34 57 66 296Press any key to continue.
如有侵权请联系告知删除,感谢你们的配 19、合!
入元素,n表长
init(a);//构造一个空表
cout< 20、于从0开始,要构造显示从一开始, 所以减1
cout«"插入后结果:";
for(j=O;j < a.length;j + +)
cout< 21、表长为5个数:1 2 3 4 5指入俞:1 2 3 4 5输入要插入位置i:2
葡入要捶入的元素x:8打字在第2个位置插入元素8插入后结果:1 8 2 3 4 5输入要删除的位置s:3lllll
"III
lllll
"III
飘|除后结果:1 8 3 4 5 Press any key to continue二、单链表的操作
(1) 创建一个带头结点的单链表;
(2) 插入元素操作:将新元素x插入到单链表中第i 个元素之后;
(3) 删除元素操作:删除单链表中值为x的元素;#include 22、 struct LN ode
int data;
struct LN ode *next;} LN ode;〃创建一个带头结点的长度长度长度为n的链表
L;void createlist(LNode *&L ,int n){
int i;
LN ode *p;
L= (LNode *)malloc(sizeof(LNode));
L->next = NULL;
for(i=l;i<=n;i++)
{p=(LNode *)malloc(sizcof(LNode));cout<< ”请输入链表第”<>p->data; p->next=L->next; 23、
L->next=p;〃插入元素操作:将新元素X插入到单链表L中第i个元素之后void insert(LNodc *&L ,int i,int x)
int j=0;
LNode *p,*q;
p二L;
while(p->next!=NULL)j++;if(j=i)
q=(LNode *)malloc(sizeof(LNode));//找到位置 q->data=x;//放入数据
q->ncxt=p->ncxt;
p->next=q;break;}p=p->next;
}
if(p->next 二二NULL) q=(LNodc *)malioc(sizeof(LNode)); 24、//找到位置 q->data=x;〃放入数据 q->next=p->next;p->next=q;}}
〃删除元素操作:删除单链表中值为X的元素;void deleted (LN ode *&L ,int x){
LN ode *p,*q;
p 二 L;
while(p->next!=N ULL)
{if(p->next->data==x){q=p->next;
p->next=p->next->next;free(q);}
p=p->next;
}}void print(LNode *&L)
LN ode *p;
p=L->next;
while(p!=NULL)
{
cout<






