数据结构上机考试(含答案)

数据结构上机考试(含答案)
数据结构上机考试(含答案)

《数据结构》上机练习题

1、设有两个有序序列,利用归并排序将它们排成有序表,并输出。

2、设有一有序序列,从键盘输入一个数,判别是否在序列中,如果在输出“YSE”;否则,将它插入到序列中使它仍然有序,并输出排序后的序列。

3、设有一有序序列,从键盘输入一个数,判别是否在序列中,如果不在,则输出“NO”,否则,将它从序列中删除它,并输出删除后的序列。

4、从键盘输入一组任意数据,建立一个有序链表,并从链头开始输出该链,使输出结果是有序的。

5、从键盘输入一组任意数据,建立一个包含所有输入数据的单向循环链表,并从链表的任意开始,依次输出该链表中的所有结点。

10、设有一个链表,(自己建立,数据从键盘输入),再从键盘输入一个数,判别是否在链表中,如果不在,则输出“NO“,否则,将它从链表中删除,并输出删除后的链表。

11、设有一个链表,(自己建立,数据从键盘输入),再从键盘输入一个数,判别是否在链表中,如果在输出“YSE”,否则,将它从插入到链头,并输出插入后的链表。

12、设有一个链表,(自己建立,数据从键盘输入),再从键盘输入一个数,判别是否在链表中,如果在输出“YSE”,否则,将它从插入到链尾,并输出插入后的链表。

13、编写栈的压栈push、弹栈pop函数,从键盘输入一组数据,逐个元素压入堆栈,然后再逐个从栈中弹出它们并输出。

14、编写栈的压栈push、弹栈pop函数,用它判别()的匹配问题。

15、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树中序遍历的结果。

16、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树先序遍历的结果。

17、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树后序遍历的结果。

18、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树的总结点数。

19、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树叶子结点数。

20、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出此二叉树的高度。

21、给出一个无向图的邻接矩阵,输出各个顶点的度。

22、给出一个有向图的邻接矩阵,输出各个顶点的入度与出度。

23、输入一个有序序列,利用折半查找来查找一个数是否在序列中,如在,则输出其位置,否则输出“NO”。

24、用插入排序方法对一组数据进行排序,并输出每趟排序的结果。

25、用选择排序方法对一组数据进行排序,并输出每趟排序的结果。

26、用希尔(SHELL)排序方法对一组数据进行排序,并输出每趟排序的结果。

27、用快速排序方法对一组数据进行排序,并输出每趟排序的结果。.

答案:

1. #include

#include

#define N 5

#define NULL 0

//链表的存储结构

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*list;

//顺序创建链表

void creatList(list &l,int n)

{

int i;

list p,q;

l=(list)malloc(sizeof(LNode)); //开辟头结点

p=l; //指针p指向头结点

for(i=0;i

{

q=(list)malloc(sizeof(LNode)); //新的结点

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

p->next=q; //p的下一个结点指向新开辟的结点q

p=q; //将p指针指向q

}

p->next=NULL;

}

//归并排序

void mergeList(list &la,list &lb,list &lc)

{ //将已经排好序的la,lb中的数重新排列成有序(非递减)

list pa,pb,pc;

pa=la->next;pb=lb->next;

lc=pc=la; //默认将la做为lc的头结点(lb亦可)

while(pa&&pb)

{ //让pc接到数据小的结点上,直到pa,pb两者有一指向空结点

if(pa->data<=pb->data)

{ pc->next=pa;pc=pa;pa=pa->next; }

else

{ pc->next=pb;pc=pb;pb=pb->next; }

}

pc->next=pa?pa:pb; //如果最后la有剩余结点,即将其直接加入到lc中,反之将lb的剩余结点加到lc中

free(lb);

}

void printList(list l)

{

list p;

p=l->next;

while(p)

{ printf("%d ",p->data);p=p->next;}

}

void main()

{

list la,lb,lc;

printf("创建两个含%d个元素的链表,请输入:\n",N);

creatList(la,N);

creatList(lb,N);

mergeList(la,lb,lc);

printList(lc);

}

2. #include

#include

#define N 5

#define NULL 0

#define OK 1

#define ERROR 0

//链表的存储结构

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*list;

//创建链表

void creatList(list &l,int n)

{

list p,q;

l=(list)malloc(sizeof(LNode));

p=l;

for(int i=0;i

{

q=(list)malloc(sizeof(LNode));

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

p->next=q;

}

p->next=NULL;

}

//判断元素e是否在链表中

int inList(list l,int e)

{

list p;

p=l->next;

while(p)

{

if(p->data==e)

return OK; //发现在里面,返回真值

p=p->next; //否则指针后移,继续找

}

return ERROR; //未找到,返回假值(没有执行return OK;语句)

}

//插入元素

void insertList(list &l,int &e)

{

list p,q,s; //q为新插入的元素开辟一个存储空间的指针,s为p前一个指针,方便插入

p=l->next;

s=l;

while(p)

{

if(e<=p->data)

{//发现要插入的元素e比后面的小,开辟空间,并将e放入空间的数据域中q=(list)malloc(sizeof(LNode));

q->data=e;

while(s->next!=p) s=s->next; //找到p前的一个指针

q->next=p; // 画图好好理解--->s--->p--->

s->next=q; // q--->

break;

}

p=p->next;

}

}

//输出链表

void printList(list l)

{

list p;

while(p)

{ printf("%d ",p->data); p=p->next;}

}

void main()

{

list l;

int e;

printf("创建%d个元素的链表,请输入%d个元素:\n",N,N);

creatList(l,N);

printf("请输入要判断的元素:");

scanf("%d",&e);

if(inList(l,e))

printf("YES ");

else

{

insertList(l,e);

printList(l);

}

}

3. #include

#include

#define N 5

#define NULL 0

#define OK 1

#define ERROR 0

//链表的存储结构

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*list;

//创建链表

void creatList(list &l,int n)

{

list p,q;

l=(list)malloc(sizeof(LNode));

p=l;

for(int i=0;i

{

q=(list)malloc(sizeof(LNode));

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

p->next=q;

p=q;

}

p->next=NULL;

}

//判断元素e是否在链表中

int insertDeleteList(list l,int e)

{

list p,q;

p=l->next; q=l;

while(p)

{

if(p->data==e)

{

while(q->next!=p) q=q->next; //找到p前一个结点,方便删除操作

q->next=p->next; //删除结点p

free(p);

return OK;

} //发现在里面,返回真值

p=p->next; //否则指针后移,继续找

}

return ERROR; //未找到,返回假值(没有执行return OK;语句)}

//输出链表

void printList(list l)

{

list p;

p=l->next;

while(p)

{ printf("%d ",p->data); p=p->next;}

}

void main()

{

list l;

int e;

printf("创建%d个元素的链表,请输入%d个元素:\n",N,N);

creatList(l,N);

printf("请输入要判断的元素");

scanf("%d",&e);

if(!insertDeleteList(l,e))

printf("NO ");

else

printList(l);

}

4. #include

#include

#define N 5

#define NULL 0

#define OK 1

#define ERROR 0

//链表的存储结构

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*list;

//创建链表

void creatList(list &l,int n)

{

list p,q;

l=(list)malloc(sizeof(LNode));

p=l;

for(int i=0;i

{

q=(list)malloc(sizeof(LNode));

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

p->next=q;

p=q;

}

p->next=NULL;

}

//链表排序

void sortList(list &l)

{

list p,q,r; //p标记排序的轮数

int chang; //用于交换结点中的数据

p=l->next;

while(p->next!=NULL)

{

q=l->next; //每次比较从首结点开始

while(q->next!=NULL)

{

r=q->next;

if(q->data>r->data) //发现前一个比后一个大,交换数据

{ chang=q->data;q->data=r->data;r->data=chang; }

q=q->next; //相邻间下一个比较

}

p=p->next; //下一轮比较

}

}

//输出链表

void printList(list l)

{

list p;

p=l->next;

while(p)

{ printf("%d ",p->data); p=p->next;}

}

void main()

{

list l;

printf("创建%d个元素的链表,请输入%d个元素:\n",N,N);

creatList(l,N);

sortList(l);

printList(l);

}

5. #include

#include

#define N 5

#define NULL 0

#define OK 1

#define ERROR 0

//链表的存储结构

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*list;

//创建链表

void creatList(list &l,int n)

{

list p,q;

l=(list)malloc(sizeof(LNode));

scanf("%d",&l->data); //头结点也添加元素,方便输出

p=l;

for(int i=1;i

{

q=(list)malloc(sizeof(LNode));

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

p->next=q;

p=q;

}

p->next=l; //让最后一个p->next指针指向头结点,构成循环链表

}

//输出链表

void printList(list l,int pos)

{

list p,q;

int i;

p=l;

for(i=1;inext; //找到指定位置的前一个位置

q=p->next;

do

{

if(pos==1) {printf("%d ",p->data); p=p->next;} //如果指定位置为1,即按原样输出

else {p=p->next; printf("%d ",p->data);} //不然,p先移到指定的位置,输出其数据

}while(p->next!=q); //结束条件(p移到的下一个位置不是q,即不是最初的p,完成循环输出)

}

void main()

{

list l;

int pos;

printf("创建%d个元素的循环链表,请输入%d个元素:\n",N,N);

creatList(l,N);

printf("请指明从第几个位置输出循环链表中的元素:");

scanf("%d",&pos);

while(pos<=0||pos>N)

{

printf("输入的位置不存在,请重新输入... ");

scanf("%d",&pos);

}

printList(l,pos);

}

11#include

#include

#define N 5

#define NULL 0

#define OK 1

#define ERROR 0

//链表的存储结构

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*list;

//创建链表

void creatList(list &l,int n)

{

list p,q;

l=(list)malloc(sizeof(LNode));

scanf("%d",&l->data); //头结点也添加元素,方便输出

p=l;

for(int i=1;i

{

q=(list)malloc(sizeof(LNode));

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

p->next=q;

p=q;

}

p->next=l; //让最后一个p->next指针指向头结点,构成循环链表

}

//输出链表

void printList(list l,int pos)

{

list p,q;

int i;

for(i=1;inext; //找到指定位置的前一个位置

q=p->next;

do

{

if(pos==1) {printf("%d ",p->data); p=p->next;} //如果指定位置为1,即按原样输出

else {p=p->next; printf("%d ",p->data);} //不然,p先移到指定的位置,输出其数据

}while(p->next!=q); //结束条件(p移到的下一个位置不是q,即不是最初的p,完成循环输出)

}

void main()

{

list l;

int pos;

printf("创建%d个元素的循环链表,请输入%d个元素:\n",N,N);

creatList(l,N);

printf("请指明从第几个位置输出循环链表中的元素:");

scanf("%d",&pos);

while(pos<=0||pos>N)

{

printf("输入的位置不存在,请重新输入... ");

scanf("%d",&pos);

}

printList(l,pos);

}

12#include

#include

#define N 5

#define NULL 0

#define OK 1

#define ERROR 0

//链表的存储结构

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*list;

//创建链表

void creatList(list &l,int n)

{

l=(list)malloc(sizeof(LNode));

p=l;

for(int i=0;i

{

q=(list)malloc(sizeof(LNode));

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

p->next=q;

p=q;

}

p->next=NULL;

}

//判断元素e是否在链表中

int inList(list l,int e)

{

list p,q;

q=p=l->next;

while(p)

{

if(p->data==e)

return OK; //发现在里面,返回真值

p=p->next; //否则指针后移,继续找

}

//没有执行return OK;语句,说明未找到

while(q->next!=p) q=q->next; //找到链尾

p=(list)malloc(sizeof(LNode)); //为链尾重新开辟空间p->data=e; //接到链尾

p->next=q->next;

q->next=p;

return ERROR; //未找到,返回假值

}

//输出链表

void printList(list l)

{

list p;

p=l->next;

while(p)

{ printf("%d ",p->data); p=p->next;}

}

void main()

{

list l;

int e;

printf("创建%d个元素的链表,请输入%d个元素:\n",N,N);

creatList(l,N);

printf("请输入要判断的元素:");

scanf("%d",&e);

if(inList(l,e))

printf("YES ");

else

printList(l);

}

13#include

#include

#define OK 1

#define Error 0

#define NULL 0

#define maxSize 100

//栈的存储结构

typedef struct

{

int *base;

int *top;

int size;

}stack;

//栈的初始化(顺序存储)

int initStack(stack &s)

{ //开辟maxSize大小的空间,base和top都指向基地址,同时判断是否开辟成功,不成功返回0

if(!(s.base=s.top=(int*)malloc(maxSize*sizeof(int)))) return Error;

s.size=maxSize; //栈的大小为maxSize

return OK;

}

//进栈操作

int push(stack &s,int e)

{

*s.top=e; //先将元素e赋值给s.top所指的存储空间

s.top++; //top指针上移

return OK;

}

//出栈操作

int pop(stack &s,int &e)

{

if(s.base==s.top) return Error; //如果栈为空,返回0

s.top--; //top指针先后移

e=*s.top; //将其所指的元素值赋给e return e;

}

void main()

{

stack s;

int n,e;

printf("请输入要创建栈的元素的个数:");

scanf("%d",&n);

initStack(s);

for(int i=0;i

{

scanf("%d",&e);

push(s,e);

}

while(s.base!=s.top)

{

printf("%d ",pop(s,e));

}

}

14#include

#include

#include

#include

#define stackincrement 8

#define OK 1

#define Error 0

#define NULL 0

#define maxSize 100

//栈的存储结构

typedef struct

{

char *base; //由于要存放括号,所以为char类型char *top;

int size;

}stack;

//栈的初始化(顺序存储)

int initStack(stack &s)

{ //注意开辟的空间为char类型

if(!(s.base=s.top=(char*)malloc(maxSize*sizeof(char)))) return Error;

s.size=maxSize; //栈的大小为maxSize

return OK;

}

//进栈操作

int push(stack &s,int e)

{

*s.top=e; //先将元素e赋值给s.top所指的存储空间

s.top++; //top指针上移

return OK;

}

int isEmpty(stack s)

{

return s.base==s.top?OK:Error;

}

//出栈操作

char pop(stack &s,char &e)

{

if(isEmpty(s)) return Error; //如果栈为空,返回0

s.top--; //top指针先后移

e=*s.top; //将其所指的元素值赋给e

return e;

}

//括号匹配

int match()

{

stack s;

initStack(s);

char ch[100],e;

int flag=1,i=0 ,lenth; //flag用于标记,如果匹配,值为1,否则为0

scanf("%c",&ch[i]);

while(ch[i]!='\n') scanf("%c",&ch[++i]); //先将所有输入的括号存放在数组ch[]中lenth=i-1; //数组的长度,不包括'\n'

i=0;

push(s,ch[i]); //先将第一个括号压栈

if(ch[i]==']'||ch[i]==')'||ch[i]=='}') flag=0; //如果第一个压入的是右括号,则肯定不匹

配,flag=0

else while(i

{

i++;char t;

if(ch[i]==']'||ch[i]==')'||ch[i]=='}')

{ t=pop(s,e); //弹出先前压入的元素,将后继输入的括号与先前压入的比较

if((t!=ch[i]-1)&&(t!=ch[i]-2)) {flag=0;break;} //左右小括号与左右大括号的ASCII码都相差1,左右中括号相差2,如果不满足,则不匹配,直接退出循环}

else push(s,ch[i]); //输入的是左括号,直接压入

}

if(!isEmpty(s)) flag=0; //通过不断的压栈和弹栈,如果最后栈不为空,则肯定是左括号多于右括号,不匹配

return flag;

}

void main()

{

int result;

printf("判断输入的各种括号是否匹配:\n");

result=match();

if(result) printf("括号匹配正确^_^\n");

else printf("括号匹配错误*.*\n");

}

15#include "stdio.h"

#include "stdlib.h"

#define stackinitsize 100

#define OK 1

#define ERROR 0

//二叉树的二叉链表存储结构

typedef struct BiTNode{

int data;

struct BiTNode *lchild,*rchild; //左右孩子指针

}BiTnode,*BiTree;

int CreateBiTree(BiTree &T){

//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树。

//构造二叉链表表示的二叉树T.

char ch;

scanf("%c",&ch);

if(ch==' ') T=NULL;

else{

if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) exit(0);

T->data=ch; //生成根结点

CreateBiTree(T->lchild);//构造左子树

CreateBiTree(T->rchild);//构造右子树

}

return OK;

}//CreateBiTree

int PrintElement(int e)

{ //输出元素e的值

printf("%c",e);

return OK;

}

int InOrderTraverse(BiTree T,int(*Visit)(int e))

//采用二叉链表存储结构,visit是对数据元素操作的应用函数,

//中序遍历二叉树T的递归算法,对每个数据元素调用函数visit。

//调用实例:InOrderTraverse(T,printElement);

{

if(T){

if (InOrderTraverse(T->lchild,Visit))

if (V isit(T->data))

if (InOrderTraverse(T->rchild,Visit)) return OK;

return ERROR;

}else return OK;

}

void main()

{

BiTree t;

printf("请按先序遍历输入二叉树(当左右子树为空时用空格输入)\n"); CreateBiTree(t);

printf("该二叉树的中序遍历为:\n");

InOrderTraverse(t,PrintElement);

printf("\n");

}

16#include "stdio.h"

#include "stdlib.h"

#define stackinitsize 100

#define OK 1

#define ERROR 0

//二叉树的二叉链表存储结构

typedef struct BiTNode{

int data;

struct BiTNode *lchild,*rchild; //左右孩子指针

}BiTnode,*BiTree;

int CreateBiTree(BiTree &T){

//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树。

//构造二叉链表表示的二叉树T.

char ch;

scanf("%c",&ch);

if(ch==' ') T=NULL;

else{

if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) exit(0);

T->data=ch; //生成根结点

CreateBiTree(T->lchild);//构造左子树

CreateBiTree(T->rchild);//构造右子树

}

return OK;

}//CreateBiTree

int PrintElement(int e)

{ //输出元素e的值

printf("%c",e);

return OK;

}

int PreOrderTraverse(BiTree T,int(*Visit)(int e))

//采用二叉链表存储结构,visit是对数据元素操作的应用函数,

//先序遍历二叉树T的递归算法,对每个数据元素调用函数visit。

//调用实例:PreOrderTraverse(T,printElement);

{

if(T){

if (V isit(T->data))

if (PreOrderTraverse(T->lchild,Visit))

if (PreOrderTraverse(T->rchild,Visit)) return OK;

return ERROR;

}else return OK;

}//preOrderTraV erse

void main()

{

BiTree t;

printf("请按先序遍历输入二叉树(当左右子树为空时用空格输入)\n"); CreateBiTree(t);

printf("该二叉树的先序遍历为:\n");

PreOrderTraverse(t,PrintElement);

printf("\n");

}

17#include "stdio.h"

#include "stdlib.h"

#define stackinitsize 100

#define OK 1

#define ERROR 0

//二叉树的二叉链表存储结构

typedef struct BiTNode{

int data;

struct BiTNode *lchild,*rchild; //左右孩子指针

}BiTnode,*BiTree;

int CreateBiTree(BiTree &T){

//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树。

//构造二叉链表表示的二叉树T.

char ch;

scanf("%c",&ch);

if(ch==' ') T=NULL;

else{

if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) exit(0);

T->data=ch; //生成根结点

CreateBiTree(T->lchild);//构造左子树

CreateBiTree(T->rchild);//构造右子树

}

return OK;

}//CreateBiTree

int PrintElement(int e)

{ //输出元素e的值

printf("%c",e);

return OK;

}

int PostOrderTraverse(BiTree T,int(*Visit)(int e))

//采用二叉链表存储结构,visit是对数据元素操作的应用函数,

//后序遍历二叉树T的递归算法,对每个数据元素调用函数visit。

//调用实例:PostOrderTraverse(T,printElement);

{

if(T){

if (PostOrderTraverse(T->lchild,Visit))

if (PostOrderTraverse(T->rchild,V isit))

if (V isit(T->data))return OK;

return ERROR;

}else return OK;

}

void main()

{

BiTree t;

printf("请按先序遍历输入二叉树(当左右子树为空时用空格输入)\n"); CreateBiTree(t);

printf("该二叉树的后序遍历为:\n");

PostOrderTraverse(t,PrintElement);

printf("\n");

}

18#include "stdio.h"

#include "stdlib.h"

#define stackinitsize 100

#define OK 1

#define ERROR 0

//#define NULL 0

static int count=0;

//二叉树的二叉链表存储结构

typedef struct BiTNode{

int data;

struct BiTNode *lchild,*rchild; //左右孩子指针

}BiTnode,*BiTree;

int CreateBiTree(BiTree &T){

//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树。

//构造二叉链表表示的二叉树T.

数据结构考试试题及答案

数据结构 一、单选题 1. 计算机算法指的是(b )。 A.程序B.问题求解步骤的描述C.调度方法D.排序方法 2. 以下数据结构中,(a )个是非线性数据结构。 A.树B.字符串C.队D.栈 3. 对于顺序存储的线性表,访问元素和插入元素的时间复杂度分别为:(c )。 A.O(n) O(n) B.O(n) O(1) C.O(1) O(n) D.O(1) O(1) 4. 在单链表指针为p的结点之后插入指针为s的结点,正确的操作是(b )。 A.p->next=s;s->next=p->next B.s->next=p->next; p->next=s C.p->next=s;p->next=s->next D.p->next=s->next; p->next=s 5. n个顶点的有向图中,含有向边的数目最多为( d ) A.n-1 B.n C.n(n-1)/2 D.n(n-1) 6. 循环队列存储在数组A[0..m]中,则入队时的操作为( d ) A.rear=rear+1 B.rear=(rear+1)mod(m-1) C.rear=(rear+1)mod m D.rear=(rear+1)mod(m+1) 7. 字符串?ababaabab?的next函数为(d ) A.011232232 B.012341234 C.011122334 D. 011234234 8. 若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数为( b )A.9 B.11 C.15 D.不确定 9. 设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当以列为主序存放时,元素A[5,8]的首地址为( b )。A.BA+141 B.BA+180 C.BA+222 D.BA+225 10. n个顶点的带权无向连通图的最小生成树包含(b )个顶点 A.n-1 B.n C.n/2 D.n+1 11.有关二叉树的下列说法正确的是( b ) A.二叉树的度为2 B.一棵二叉树的度可以小于2 C.二叉树中至少有一个结点的度为2 D.二叉树中任何一个结点的度都为2 12.关键路径是AOE网中( a )。 A.从源点到汇点的最长路径B.从源点到汇点的最短路径 C.最长回路 D.最短路径(从源点到汇点的所有路径中,经过弧的数目最多的路径) 13.若查找每个记录的概率相等,则在具有n个记录的连续文件中采用顺序查找查找一个记录,其平均查找长度ASL为(c)。 A.(n-1)/2 B.n/2 C.(n+1)/2 D.n 14.就平均性能而言,目前最好的内部排序方法是(d ) A.冒泡排序B.希尔排序C.堆排序D.快速排序 15.已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是(d )A.head(tail(LS)) B.tail (head (LS) C.head(tail(head(tail(LS)))) D.head(tail(tail (head (LS)))) 17.在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是:( a ) A. 访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n) B. 在第i个结点后插入一个新结点(1≤i≤n)

2017年数据结构期末考试题及答案A

2017年数据结构期末考试题及答案 一、选择题(共计50分,每题2分,共25题) 1 ?在数据结构中,从逻辑上可以把数据结构分为 C 。 A. 动态结构和静态结构B?紧凑结构和非紧凑结构 C.线性结构和非线性结构 D .内部结构和外部结构 2?数据结构在计算机内存中的表示是指 A ° A. 数据的存储结构 B.数据结构 C.数据的逻辑结构 D .数据元 素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A. 逻辑B?存储 C.逻辑和存储 D.物理 4 .在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C ° A.数据的处理方法B?数据元素的类型 C.数据元素之间的关系 D.数据的存储方法 5. 在决定选取何种存储结构时,一般不考虑 A ° A.各结点的值如何B?结点个数的多少 C?对数据有哪些运算 D.所用的编程语言实现这种结构是否方便。 6. 以下说法正确的是D ° A. 数据项是数据的基本单位 B. 数据元素是数据的最小单位 C. 数据结构是带结构的数据项的集合 D. —些表面上很不相同的数据可以有相同的逻辑结构 7. 在以下的叙述中,正确的是B ° A. 线性表的顺序存储结构优于链表存储结构 B. 二维数组是其数据元素为线性表的线性表 C?栈的操作方式是先进先出 D.队列的操作方式是先进后出

8. 通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着 A. 数据元素具有同一特点 B. 不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致 C. 每个数据元素都一样 D. 数据元素所包含的数据项的个数要相等 9 ?链表不具备的特点是 A 。 A.可随机访问任一结点 B.插入删除不需要移动元素 C?不必事先估计存储空间 D.所需空间与其长度成正比 10. 若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一 个结点,则采用 D 存储方式最节省运算时间。 A.单链表B ?给出表头指针的单循环链表 C.双链表D ?带头结点 的双循环链表 11. 需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是 B 。 A.单链表B .静态链表 C.线性链表 D .顺序存储结构 12 .非空的循环单链表head的尾结点(由p所指向)满足C 。 A. p—>next 一NULL B. p — NULL C. p—>next == head D. p = = head 13 .在循环双链表的p所指的结点之前插入s所指结点的操作是 D 。 A .p—> prior-> prior=s B .p—> prior-> n ext=s C.s —> prior—> n ext = s D.s —> prior—> prior = s 14 .栈和队列的共同点是C 。 A.都是先进后出 B .都是先进先出 C.只允许在端点处插入和删除元素 D .没有共同点

国家二级ACCESS机试选择题(数据结构与算法)模拟试卷3

国家二级ACCESS机试选择题(数据结构与算法)模拟试卷3 (总分:60.00,做题时间:90分钟) 一、选择题(总题数:30,分数:60.00) 1.在最坏情况下 (分数:2.00) A.快速排序的时间复杂度比冒泡排序的时间复杂度要小 B.快速排序的时间复杂度比希尔排序的时间复杂度要小 C.希尔排序的时间复杂度比直接插入排序的时间复杂度要小√ D.快速排序的时间复杂度与希尔排序的时间复杂度是一样的 解析:解析:按平均时间将排序分为四类:①平方阶(O(n 2 ))排序:各类简单排序,例如直接插入、直接选择和冒泡排序;②线性对数阶(O(n。log2n))排序:如快速排序、堆排序和归并排序;③O(n1+§))排序:§是介于0和1之间的常数。希尔排序便是一种;④线性阶(O(n))排序:本程序中的基数排序,此外还有桶、箱排序。 2.在深度为7的满二叉树中,度为2的结点个数为 (分数:2.00) A.64 B.63 √ C.32 D.31 解析:解析:因为在任意的二叉树中,度为O的结点(即叶子结点)总比度为2的结点的个数多1个,而度为0的结点数n 0 =2 m-1 (其中m为二叉树的深度)。本题的度为0的结点个数n 0 =2 7-1 =2 6 =64。因此,度为2的结点数n 2 =n 0 -1=63。所以选项B正确 3.设栈的顺序存储空间为S(1:m),初始状态为top=m+1。现经过一系列入栈与退栈运算后,top=20,则当前栈中的元素个数为 (分数:2.00) A.30 B.20 C.m-19 √ D.m-20 TOP指针向上移动一位。当压入第一个元素时,TOP指针指向m+1-1=m;当压入第二个元素时,TOP指针指向 1n+1.2=m.1;…以此类推,当压入第N个元素时,TOP指针指向m+1-N=20;则N=m+1-20=m-19。因此选项C正确。 4.算法空间复杂度的度量方法是 (分数:2.00) A.算法程序的长度 B.算法所处理的数据量 C.执行算法所需要的工作单元 D.执行算法所需要的存储空间√ 解析:解析:算法空间复杂度是对一个算法在运行过程中临时占用存储空间大小的度量,因此选项D正确。 5.设循环队列为Q(1:m),其初始状态为front=rear=m。经过一系列入队与退队运算后,front=15,rear=20。现要在该循环队列中寻找最大值的元素,最坏情况下需要比较的次数为 (分数:2.00) A.4 √ B.6 C.m-5

《数据结构》期末考试试题及答案

数据结构》期末考试试题及答案 ( 2003-2004 学年第 2 学期 ) 单项选择题 1、C 2、D 3、A 4、D 5、C 6、D 7、A 8、B 9、C 10、C 7.图的 Depth-First Search (DFS ) 遍历思想实际上是二叉树( 法的推广。 (A )、先序 ( B )、中序 (C )、后序 (D )、层序 8.在下列链队列 Q 中,元素 a 出队的操作序列为( p=Q.front->next; p->next= Q.front->next; p=Q.front->next; Q.front->next=p->next; p=Q.rear->next; p->next= Q.rear->next; p=Q->next; Q->next=p->next; 9. Huffman 树的带权路径长度 WPL 等于( c ( A )、除根结点之外的所有结点权值之和1.对于一个算法,当输入非法数据时,也要能作出相应的处理,这种要求称为 ( c )。 (A ) 、正确性 (B ). 可行性 (C ). 健壮性 2.设 S 为 C 语言的语句 ,计算机执行下面算法时, for (i=n-1 ; i>=0 ; i--) for (j=0 ;j

数据结构考试题库

数据结构考试题库

绪论 一、填空题 1.数据的逻辑结构被分为集合、(线性结构)、(树形结构)和(图状结构)四种。 2.物理结构是数据结构在计算机中的表示,又称为(存储结构)。 3.数据元素的逻辑结构包括( 线性)、(树)和图状结构3种类型,树形结构和图状结构合称为(非线性结构)。 4.(数据元素)是数据的基本单位,(数据项)是数据不可分割的最小单位。 5.线性结构中元素之间存在(一个对一个)关系,树形结构中元素之间存在(一个对多个)关系,图状结构中元素之间存在(多个对多个)关系。 ?6.数据结构是一门研究非数值计算的程序设计问题中:计算机的(数据元素)以及它们之间的(关系)和(运筹)等的学科。 7.算法的五个重要特性为有穷性、确定性、(输入)、(输出)和(可行性)。 二、选择题 1.数据的不可分割的基本单位是(D)。 A.元素 B.结点 C.数据类型 D.数据项 *2.线性表的逻辑顺序与存储顺序总是一致的,这种说法(B)。 A.正确 B.不正确 C.不确定 D.无法选择 3.线性结构是指数据元素之间存在一种(D)。 精心整理,用心做精品2

A.一对多关系 B.多对多关系 C.多对一关系 D.一对一关系 4.在数据结构中,从逻辑上可以把数据结构分成(A)。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 5.线性表若采用链式存储结构时,要求内存中可用存储单元的 地址( D)。 A.必须是连续的 B.部分地址必须是连续的 C.一定是不连续的 D.连续不连续都可以 三、简答题 1.算法的特性是什么。 答:有穷性确定性可行性有0或多个输入有1或多个输出线性结构 一、填空题 1.在一个长度为n的线性表中删除第i个元素(1≤i≤n)时,需向前移动(n-i)个元素。 2.从循环队列中删除一个元素时,其操作是(先移动队首指针,后取出元素)。 3.在线性表的单链接存储中,若一个元素所在结点的地址为p,则其后继结点的地址为(p->next)。 4.在一个单链表中指针p所指向结点的后面插入一个指针q所指向的结点时,首先把(p->next)的值赋给q->next,然后(q->date)的值赋给p->next。 5.从一个栈删除元素时,首先取出(栈顶元素),然后再使(栈顶指针)减1。 6.子串的定位操作通常称做串的(模式匹配)。 精心整理,用心做精品3

数据结构上机例题及答案

习题二 ⒉1描述以下四个概念的区别:头指针变量,头指针,头结点,首结点(第一个结点)。解:头指针变量和头指针是指向链表中第一个结点(头结点或首结点)的指针;在首结点之前附设一个结点称为头结点;首结点是指链表中存储线性表中第一个数据元素的结点。若单链表中附设头结点,则不管线性表是否为空,头指针均不为空,否则表示空表的链表的头指针为空。 2.2简述线性表的两种存储结构有哪些主要优缺点及各自使用的场合。 解:顺序存储是按索引直接存储数据元素,方便灵活,效率高,但插入、删除操作将引起元素移动,降低了效率;而链式存储的元素存储采用动态分配,利用率高,但须增设表示结点之间有序关系的指针域,存取数据元素不如顺序存储方便,但结点的插入和删除十分简单。顺序存储适用于线性表中元素数量基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素的情况;而链式存储适用于频繁进行元素动态插入或删除操作的场合。 2.3 在头结点为h的单链表中,把值为b的结点s插入到值为a的结点之前,若不存在a,就把结点s插入到表尾。 Void insert(Lnode *h,int a,int b) {Lnode *p,*q,*s; s=(Lnode*)malloc(sizeof(Lnode)); s->data=b; p=h->next; while(p->data!=a&&p->next!=NULL) {q=p; p=p->next; } if (p->data==a) {q->next=s; s->next=p;} else

{p->next=s; s->next=NULL; } } 2.4 设计一个算法将一个带头结点的单链表A分解成两个带头结点的单链表A和B,使A中含有原链表中序号为奇数的元素,而B中含有原链表中序号为偶数的元素,并且保持元素原有的相对顺序。 Lnode *cf(Lnode *ha) {Lnode *p,*q,*s,*hb; int t; p=ha->next; q=ha; t=0; hb=(Lnode*)malloc(sizeof(Lnode)); s=hb; while(p->next!=NULL) {if (t==0) {q=p;p=p->next;t=1;} else {q->next=p->next; p->next=s->next; s->next=p; s=p; p=p->next; t=0; } } s->next=NULL; return (hb); }

数据结构C语言版期末考试试题(有答案)

“数据结构”期末考试试题 一、单选题(每小题2分,共12分) 1.在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行( )。 A. HL=ps p一>next=HL B. p一>next=HL;HL=p3 C. p一>next=Hl;p=HL; D. p一>next=HL一>next;HL一>next=p; 2.n个顶点的强连通图中至少含有( )。 A.n—l条有向边 B.n条有向边 C.n(n—1)/2条有向边 D.n(n一1)条有向边 3.从一棵二叉搜索树中查找一个元素时,其时间复杂度大致为( )。 A.O(1) B.O(n) C.O(1Ogzn) D.O(n2) 4.由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为( )。 A.24 B.48 C. 72 D. 53 5.当一个作为实际传递的对象占用的存储空间较大并可能需要修改时,应最好把它说明为( )参数,以节省参数值的传输时间和存储参数的空间。 A.整形 B.引用型 C.指针型 D.常值引用型· 6.向一个长度为n的顺序表中插人一个新元素的平均时间复杂度为( )。 A.O(n) B.O(1) C.O(n2) D.O(10g2n) 二、填空题(每空1分,共28分) 1.数据的存储结构被分为——、——、——和——四种。 2.在广义表的存储结构中,单元素结点与表元素结点有一个域对应不同,各自分别为——域和——域。 3.——中缀表达式 3十x*(2.4/5—6)所对应的后缀表达式为————。 4.在一棵高度为h的3叉树中,最多含有——结点。 5.假定一棵二叉树的结点数为18,则它的最小深度为——,最大深度为——· 6.在一棵二叉搜索树中,每个分支结点的左子树上所有结点的值一定——该结点的值,右子树上所有结点的值一定——该结点的值。 7.当向一个小根堆插入一个具有最小值的元素时,该元素需要逐层——调整,直到被调整到——位置为止。 8.表示图的三种存储结构为——、——和———。 9.对用邻接矩阵表示的具有n个顶点和e条边的图进行任一种遍历时,其时间复杂度为——,对用邻接表表示的图进行任一种遍历时,其时间复杂度为——。 10.从有序表(12,18,30,43,56,78,82,95)中依次二分查找43和56元素时,其查找长度分别为——和——· 11.假定对长度n=144的线性表进行索引顺序查找,并假定每个子表的长度均

数据结构期末考试试题及答案

数据结构期末考试试题及答案 、选择题 评价一个算法时间性能的主要标准是()。1. A、算法易于调试 B、算法易于理解 C、算法的稳定性和正确性 D、算法的时间复杂度 )等五个特性。计算机算法具备有输入、输出、 2. A、可行性、可移植性和可扩充性 B、可行性、确定性和有穷性 C、确定性、有穷性和稳定性 D、XX、稳定性和XX 。带头结点的单链表head为空的判定条件是()3. A、h ead==NULL B、h ead->next==NULL C、head->next==head D、head!=NULL 以下关于线性表的说法不正确的是()。4. A、线性表中的数据元素可以是数字、字符、记录等不同类型。 B、线性表中包含的数据元素个数不是任意的。

C、线性表中的每个结点都有且只有一个直接前趋和直接后继。 D、存在这 样的线性表:表中各结点都没有直接前趋和直接后继。 在顺序表中,只要知道(),就可在相同时间内求出任一结点的存储地址。 5.A、基地址 B、结点大小 C、向量大小 D、基地址和结点大小 ()运算中,使用顺序表比链表好。6. A、插入 B、删除 C、根据序号查找 D、根据元素值查找一个长度为n的顺序表中,向第i个元素之前插入一个新元素时,需要向后移动()个元素7.A、n-i B、n-i+1 C、n-i-1 D、i ()适合作为经常在首尾两端操作线性表的存储结构。8. A、顺序表 B、单链表 C、循环链表 D、双向链表

栈和队列的共同点是() 9. A、都是先进后出 B、都是先进先出 C、只允许在端点处插入和删除元素 D、没有共同点 一个队列的入列序列是1234,则队列的输出序列是()。10. A 、4321 B 、12 3 4 C 、1432 D 、 3241队列与一般的线性表的区别在于()。11. A、数据元素的类型不同 B、运算是否受限制 C、数据元素的个数不同 D、逻辑结构不同 假上溢”现象会出现在()中。12. A、循环队列 B、队列 C、链队列 、顺序队列D.二、填空

经典数据结构上机题_答案解析

数据结构上机实验题目 实验一线性表的顺序存储结构 实验学时 2学时 背景知识:顺序表的插入、删除及应用。 目的要求: 1.掌握顺序存储结构的特点。 2.掌握顺序存储结构的常见算法。 实验容 1.输入一组整型元素序列,建立顺序表。 2.实现该顺序表的遍历。 3.在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。4.判断该顺序表中元素是否对称,对称返回1,否则返回0。 5.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。 6.输入整型元素序列利用有序表插入算法建立一个有序表。 7.利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表。 8. 利用该顺序结构实现循环队列的入队、出队操作。 8.编写一个主函数,调试上述算法。 #include #include

#define OVERFLOW 0 #define MAXSIZE 100 typedef int ElemType; typedef struct list {ElemType elem[MAXSIZE]; int length; }Sqlist; void Creatlist(Sqlist &L) {int i; printf("请输入顺序表的长度:"); //输入一组整型元素序列,建立一个顺序表。 scanf("%d",&L.length); for(i=0;i

数据结构复习资料,java数据结构期末考试

第二章算法分析 1.算法分析是计算机科学的基础 2.增长函数表示问题(n)大小与我们希望最优化的值之间的关系。该函数表示了该算法的时间复杂度或空间复杂度。增长函数表示与该问题大小相对应的时间或空间的使用 3.渐进复杂度:随着n的增加时增长函数的一般性质,这一特性基于该表达式的主项,即n 增加时表达式中增长最快的那一项。 4.渐进复杂度称为算法的阶次,算法的阶次是忽略该算法的增长函数中的常量和其他次要项,只保留主项而得出来的。算法的阶次为增长函数提供了一个上界。 5.渐进复杂度:增长函数的界限,由增长函数的主项确定的。渐进复杂度类似的函数,归为相同类型的函数。 6.只有可运行的语句才会增加时间复杂度。 7. O() 或者大O记法:与问题大小无关、执行时间恒定的增长函数称为具有O(1)的复杂度。 增长函数阶次 t(n)=17 O(1) t(n)=3log n O(log n) t(n)=20n-4 O(n) t(n)=12n log n + 100n O(n log n) t(n)=3n2+ 5n - 2 O(n2) t(n)=8n3+ 3n2O(n3) t(n)=2n+ 18n2+3n O(2n) 8.所有具有相同阶次的算法,从运行效率的角度来说都是等价的。 9.如果算法的运行效率低,从长远来说,使用更快的处理器也无济于事。 10.要分析循环运行,首先要确定该循环体的阶次n,然后用该循环要运行的次数乘以它。(n 表示的是问题的大小) 11.分析嵌套循环的复杂度时,必须将内层和外层循环都考虑进来。 12.方法调用的复杂度分析: 如:public void printsum(int count){ int sum = 0 ; for (int I = 1 ; I < count ; I++) sum += I ; System.out.println(sun); } printsum方法的复杂度为O(n),计算调用该方法的初始循环的时间复杂度,只需把printsum方法的复杂度乘以该循环运行的次数即可。所以调用上面实现的printsum方法的复 杂度为O(n2)。 13指数函数增长> 幂函数增长> 对数函数增长

数据结构期末考试试题及答案

《数据结构》期末考试试题及答案 (2003-2004学年第2学期) 单项选择题1、C 2、D 3、A 4、D 5、C 6、D 7、A 8、B 9、C 10、C 、 1. 对于一个算法,当输入非法数据时,也要能作出相应的处理,这种要求称为 (c )。 (A)、正确性但).可行性(C).健壮性 2 ?设S为C语言的语句,计算机执行下面算法时, for(i=n-1 ; i>=0; i--) for(j=0 ; jvi; j++) (A)、n2(B). O(nlgn) 3?折半查找法适用于( a (D). 输入性 算法的时间复杂度为(d S; (C). O(n) (D). )。 O(n2) (A)、有序顺序表(B)、有序单链表 (C)、有序顺序表和有序单链表都可以 4 .顺序存储结构的优势是( d )。 (A)、利于插入操作(B)、利于删除操作 (C)、利于顺序访问(D)、利于随机访问 5. 深度为k的完全二叉树,其叶子结点必在第 (A)、k-1 ( B)、k (C)、k-1 和 6. 具有60个结点的二叉树,其叶子结点有 (A)、11 ( B)、13 ( C)、48 (D)、无限制 c )层上。 (D)、1 至 k 12个,则度过1 (D)、37 k 的结点数为( 7 .图的Depth-First Search(DFS) 遍历思想实际上是二叉树( 法的推广。 (A)、先序(B)、中序(C)、后序(D)、层序 8.在下列链队列Q中,元素a出队的操作序列为( a )遍历方 front (A )、 (B )、 (C)、 (D )、p=Q.front->next; p->next= Q.front->next; p=Q.front->next; Q.front->next=p->next; p=Q.rear->next; p->next= Q.rear->next; p=Q->next; Q->next=p->next; 9. Huffman树的带权路径长度WPL等于( (A)、除根结点之外的所有结点权值之和(C)、各叶子结点的带权路径长度之和(B) 、 ) 所有结点权值之和 根结点的值 b ■

《数据结构》期末考试题及答案

2011-2012学年第一学期期末考查 《数据结构》试卷 (答案一律写在答题纸上,在本试卷上做答无效) 一、选择(每题1分,共10分) 1.长度为n的线性表采用顺序存储结构,一个在其第i个位置插入新元素的算法时间复杂度为(D) A.O(0) B.O(1) C.O(n) D.O(n2) 2.六个元素按照6,5,4,3,2,1的顺序入栈,下列哪一个是合法的出栈序列?(D) A.543612 B.453126 C.346512 D.234156 3.设树的度为4,其中度为1、2、3、4的结点个数分别是4、2、1、2,则树中叶子个数为(B ) A.8 B.9 C.10 D.11 4.设森林F对应的二叉树B有m个结点,B的右子树结点个数为n,森林F中第一棵树的结点个数是( B ) A. m-n B.m-n-1 C.n+1 D.m+n 5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是(B) A.9 B.11 C.15 D.不确定 6.下列哪一个方法可以判断出一个有向图是否有环。(A) A.深度优先遍历 B.拓扑排序 C.求最短路径 D.求关键路径 7.第7层有10个叶子结点的完全二叉树不可能有(B )个结点。 A.73 B.234 C.235 D.236 8.分别用以下序列构造二叉排序树,与用其他三个序列构造的结果不同的是(B) A.(100,80,90,60,120,110,130) B.(100, 120, 110,130,80, 60,90) C.(100,60,80,90,120,110,130) D.(100,80, 60,90, 120, 130,110) 9.对一组数据(84,47,25,15,21)排序,数据的排列次序在排序过程中变化如下:(1)84 47 25 15 21 (2)15 47 25 84 21 (3)15 21 25 84 47(4)15 21 25 47 84则采用的排序方法是(B ) A.选择排序 B.起泡排序 C.快速排序 D.插入排序 10.对线性表进行折半查找时,要求线性表必须(D) A.以顺序方式存储 B.以顺序方式存储,且数据元素有序

数据结构上机考试题

注意事项1. 考试时间2小时,13:00-15:00 2. 题目4选2 3. 所有题目均使用标准输入和标准输出3. 只提交源程序,文件后缀名只能是.C或.CPP 4. 源文件大小不能超过10K,否则会被当作恶意提交而扣分5. 严格按照题目要求输出,去掉不需要的提示信息或调试信息6. 在程序中不要使用fflush(stdin)函数,否则会导致结果错误另外注意:本次是模拟测试,上机时间是4个小时,我们考试时间从14点开始到17点30分结束。同学视自己的能力,能做几道做几道。 哈夫曼树 时间限制: 100 second 内存限制: 100 Kb 描述 构造哈夫曼树(最优二叉树) 输入 输入n个结点每个结点的权值 输出 构造哈夫曼树(是最优二叉树)得到每个结点的哈夫曼编码 输入样例 23 186 64 13 22 32 103 21 15 47 57 1 5 32 20 57 63 15 1 48 51 80 23 8 输出样例 1( 186):00 2( 64):1001 3( 13):101100 4( 22):110010 5( 32):11100 6( 103):011 7( 21):110001 8( 15):101101 9( 47):11010 10( 57):0101 11( 1):101111000 12( 5):10111101 13( 32):11101 14( 20):110000 15( 57):1010 16( 63):1000 17( 15):101110 18( 1):101111001 19( 48):11011 20( 51):0100 21( 80):1111 22( 23):110011 23( 8):1011111 提示 输入第一行是结点数23 第二行是这几个结点的权值输出格式为结点号(权值):哈夫曼编码

数据结构考试题

一、选择题(共15题,每题2分,共计30分) 1、单链表的一个存储结点包含( C ) A.指针域和链域 B.指针域或链域 C.数据域或指针域 D.数据域和链域 2、采用线性链表表示一个向量时,要求占用的存储空间地址( D )。 A、必须是连续的 B、部分地址必须是连续的 C、一定是不连续的 D、可连续可不连续 3、当利用大小为n的数组顺序存储一个队列时,该队列的最大长度为( B )。 A. n-2 B. n-1 C. n D. n+1 4、在一个单链表中,若q结点是p结点的前驱结点,若在q与p之间插入结点s,则执行( D )。 A、s→next = p→next; p→next = s; B、p→next = s; s→next k = q; C、p→next = s→next; s→next = p; D、q→next = s; s→next = p; 5、在数组A中,每一个数组元素A[i, j] 占用3个存储字,行下标i从1到8,列下标j 从1到10。所有数组元素相继存放于一个连续的存储空间中,则存放该数组至少需要的存储字数是( C )。 A、 80 B、 100 C、 240 D、 270 6、将一个递归算法改为对应的非递归算法时,通常需要使用( A )。 A、栈 B、队列 C、循环队列 D、优先队列 7、一个队列的进队列顺序是1, 2, 3, 4,则出队列顺序为( C )。 A、4, 3, 2, 1 B、2, 4, 3, 1 C、1, 2, 3, 4 D、3, 2, 1, 4 8.下述各类表中可以随机访问的是(D )。 A. 单向链表 B. 双向链表 C.单向循环链表 D.顺序表 9.在一个长度为n的顺序表中为了删除第5个元素,从前到后依次移动了15个元素。则原顺序表的长度为( B )。 A. 21 B. 20 C. 19 D. 25 10.元素1,3,5按顺序依次进栈,则该栈的不可能的输出序列是( B )。 A. 5 3 1 B. 5 1 3 C. 3 1 5 D. 1 5 3 11.一个队列的入队序列是5,6,7,8,则队列的输出序列是( A )。 A. 5 6 7 8 B. 8 7 6 5 C. 7 8 6 5 D.可能有多种情况 12.在一个单链表中,p、q分别指向表中两个相邻的结点,且q所指结点是p所指结点的直接后继,现要删除q所指结点,可用语句(C )。 A.p=q->next B.p->next=q C.p->next=q->next D.q->next=NULL 13.设一棵哈夫曼树共有n个非叶结点,则该树一共有( B )个结点。 A. 2*n-1 B. 2*n +1 C. 2*n D. 2*(n-1) 14.对如图1所示二叉树进行中序遍历,结果是( A )。 A. dfebagc B. defbagc C. defbacg D.dbaefcg

数据结构考试及答案()

数据结构考试及答案()

作者: 日期: 2

数据结构试题 一、单选题 1、在数据结构的讨论中把数据结构从逻辑上分为(C) A 内部结构与外部结构 B 静态结构与动态结构 C 线性结构与非线性结构 D 紧凑结构与非紧凑结构。 2、采用线性链表表示一个向量时,要求占用的存储空间地址(D) A 必须是连续的B部分地址必须是连续的 C 一定是不连续的D可连续可不连续 3、采用顺序搜索方法查找长度为n的顺序表时,搜索成功的平均搜索长度为 (D )。 An B n/2 C (n-1)/2 D (n+1)/2 4、在一个单链表中,若q结点是p结点的前驱结点,若在q与p之间插入结点s,则执行(D )o A s—link = p—link ;p—link = s; B p—link = s; s—link = q; C p—link = s—link ;s—link = p; D q—link = s; s—link = p; 5、如果想在4092个数据中只需要选择其中最小的5个,采用(C )方法最好。 A 起泡排序 B 堆排序C锦标赛排序 D 快速 排序 6、设有两个串t和p,求p在t中首次出现的位置的运算叫做(B )o A 求子串B模式匹配C 串替换 D 串连接 7、在数组A中,每一个数组元素A[i][j] 占用3个存储字,行下标i从1到8,

列下标j从1到10。所有数组元素相继存放于一个连续的存储空间中,则存放 该数组至少需要的存储字数是( C )。 A 80 B 100 C 240 D 270 8、将一个递归算法改为对应的非递归算法时,通常需要使用( A )。 A 栈B队列C循环队列D优先队列 9、一个队列的进队列顺序是1,2, 3, 4 ,则出队列顺序为(C )。 10、在循环队列中用数组A[0.. m-1]存放队列元素,其队头和队尾指针分别为front和rear,则当前队列中的元素个数是( D )。 A ( front - rear + 1) % m B (rear - front + 1) %m C ( front - rear + m) % m D ( rear - front + n) % m 11、一个数组元素a[i]与(A )的表示等价。 A * (a+i) B a+i C *a+i D &a+i 12、若需要利用形参直接访问实参,则应把形参变量说明为( B )参数 A指针 B 引用C值 D 变量 13、下面程序段的时间复杂度为(C) for (i nt i=0;i

数据结构上机考试试题

数据结构上机考试试题(C++语言版) 考试要求:本次考试共列考核试题4大题,考生可以在所列4个考核试题中任选3个小题(即可能只属于2个大题),作为上机考核试题。 考核原则:所选题目在上机编程调试通过后即为考核通过。监考教师依据学生编程及调试通过与否情况给予考核成绩。 考核成绩评分标准: 所选3个题目全部编写出程序并调试通过:优 所选3个题目全部编写出程序,但只有2个上机调试通过:良 所选3个题目全部编写出程序,但只有1个上机调试通过:及格 所选3个题目全部编写出程序但都没有上机调试通过,或没有编写出全部程序:不及格。考核时间:2小时。 考核试题: 1、建立一个顺序方式存储的线性表,向表中输入若干元素后进行以下操作: (1)向线性表的表头、表尾或合适位置插入元素 (2)对线性表按升序或降序输出 2、建立一个动态链接方式存储的线性表,向表中输入若干元素后进行以下操作: (1)从单链表中查找指定元素 (2)返回单链表中指定序号的结点值 3、建立一个动态链接结构存储的二叉树,向这棵二叉树进行以下操作: (1)按任中序遍历次序输出二叉树中的所有结点 (2)求二叉树的叶子数 4、编写一个对整型数组A[n+1]中的A[1]至A[n]元素进行选择排序的算法,使得首先从待排序区间中选择出一个最大值并同最后一个元素交换,再从待排序区间中选择出一个最小值并同最第一个元素交换,反复进行直到待排序区间中元素的个数不超过1为止。 #include<> #include<> #include"" //初始化线性表 void InitList(LinearList& L, int ms) { =new ElemType[ms]; if(! { cerr<<"Memory allocation failure!"<

《数据结构》期末考试试卷

广东创新科技职业学院期末考试试题(标明A 卷、B 或C 卷) 2018 —2019 学年第二学期考试科目:《数据结构》 (闭(开)卷 90分钟) 院系____________ 班级____________ 学号___________ 姓名 __________ 一、选择题(每小题 2 分,共 40 分) 1.计算机识别、存储和加工处理的对象被统称为()。 A .数据 B .数据元素 C .数据结构 D .数据类型 2.数据结构指的是数据之间的相互关系,即数据的组织形式。数据结构一般包括()三方面内容。 A .数据的逻辑结构、数据的存储结构、数据的描述 B .数据的逻辑结构、数据的存储结构、数据的运算 C .数据的存储结构、数据的运算、数据的描述 D .数据的逻辑结构、数据的运算、数据的描述3.数据的逻辑结构包括()。 A .线性结构和非线性结构 B .线性结构和树型结构 C .非线性结构和集合结构

D .线性结构和图状结构 4.()的特征是:有且仅有一个开始结点和一个终端结点,且所有结点都最多只有一个直接前驱和一个直接后继。 A .线性结构 B .非线性结构 C .树型结构 D .图状结构 5. 评价一个算法时间性能的主要标准是()。 A .算法易于调试 B .算法易于理解 C .算法的稳定性和正确性 D .算法的时间复杂度 6. 下述程序段①中各语句执行频度的和是()。 s=0; ① for(i=1;i<=i;j++) s+=j; A .n-1 B .n C .2n-1 D .2n 7. 下面程序段的时间复杂度为()。 for(i=0;i

2015年数据结构期末考试题及答案

2012年数据结构期末考试题及答案 一、选择题 1.在数据结构中,从逻辑上可以把数据结构分为C。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指A。 A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的A结构。 A.逻辑B.存储C.逻辑和存储D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储C。 A.数据的处理方法B.数据元素的类型 C.数据元素之间的关系D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑A。 A.各结点的值如何B.结点个数的多少 C.对数据有哪些运算D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是D。 A.数据项是数据的基本单位 B.数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是C,算法分析的两个主要方面是A。 (1)A.找出数据结构的合理性B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进C.分析算法的易读性和文档性 (2)A.空间复杂度和时间复杂度B.正确性和简明性 C.可读性和文档性D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是O(n2)。

s =0; for(I =0;i<n;i++) for(j=0;j<n;j++) s +=B[i][j]; sum =s ; 9.下面程序段的时间复杂度是O(n*m)。 for(i =0;i<n;i++) for(j=0;j<m;j++) A[i][j] =0; 10.下面程序段的时间复杂度是O(log3n)。 i =0; while(i<=n) i =i * 3; 11.在以下的叙述中,正确的是B。 A.线性表的顺序存储结构优于链表存储结构 B.二维数组是其数据元素为线性表的线性表 C.栈的操作方式是先进先出 D.队列的操作方式是先进后出 12.通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着B 。 A.数据元素具有同一特点 B.不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致 C.每个数据元素都一样 D.数据元素所包含的数据项的个数要相等 13.链表不具备的特点是A。 A.可随机访问任一结点B.插入删除不需要移动元素 C.不必事先估计存储空间D.所需空间与其长度成正比 14.不带头结点的单链表head为空的判定条件是A。

相关文档
最新文档