文档库 最新最全的文档下载
当前位置:文档库 › 数据结构

数据结构

数据结构
数据结构

第一章

例1.计算下面交换i和j内容程序段的时间复杂度。

Tem=i;(1次)i=j;(1次) j=tem;(1次)

解:以上三条单个语句执行1次,该程序段的执行时间是一个与问题n无关的常数,因此,算法的时间复杂度为常数阶,记作T(n)=O(n)。

例2 :计算下面求累加和程序段的时间复杂度

(1)sum=0;(1次)

(2)for(i=1;i

(3)for(j=1;j

(4)sum++;(n2次)

解:T(n)=2n2+n+1 =O(n2)

时间复杂度举例:

例3、分析下面程序段的时间复杂度:

i=1; (1)

while (i<=n) ……log2n+1

i=i*2; ……log2n

设i=i*2这条语句的执行次数为f(n),

则有2f(n)<=n 即f(n)<=log2n

则该程序段的时间复杂度为:

T(n)=1+log2n+log2n+1 =O(log2n)

例4、分析下面程序段的时间复杂度:

a=0;b=1; (2)

for (i=2;i<=n;i++) ……n

{ s=a+b; ……n-1

b=a; ……n-1

a=s; ……n-1

}

则该程序段的时间复杂度为:

T(n)=2+n+3(n-1)=4n-1=O(n)

以上是求时间复杂度的一种方法,下面是另外一种求法。举例说明:

for(i=1;i

for(j=1;j<=n;++j)…………………….O(n)

{ c[i][j]=0;…………………………..O(1)

for(k=1;k<=n;++k)……………..O(n)

c[i][j]+=a[i][k]*b[k][j];…….O(1)

}

t(n)=O(n)*O(n)*[O(1)+O(n)*O(1)]=O(n3)

加法法则:m>=n时O(m)+O(n)=O(m)

乘法法则:O(m)*O(n)=O(m*n)

习题:一.判断题

1、数据元素是数据的最小单位。

2、数据结构是带有结构的数据元素的结合

3、数据结构、数据元素、数据项在计算机中的映像分别称为存储结构、结点、数据域。

4、数据项是数据的基本单位。

5、数据的逻辑结构是指各数据之间的逻辑关系,是用户按使用需要而建立的。

6、数据的物理结构是指数据在计算机内实际的存储形式。

答案:1.N 2.Y 3.Y 4.N 5.Y 6.Y

二、概念:

数据结构数据数据元素数据对象

1、数据(data)—所有能输入到计算机中去的描述客观事物的符号,如棋盘状态,图。

2、数据元素(data element)—数据的基本单位,也称结点(node)或记录(record)

3、数据项(data item)—有独立含义的数据最小单位,也称域(field)

4、数据结构(data structure)—是相互之间存在一种或多种特定关系的数据元素的集合(简单定义)。

第二章

例2.1 已知两个集合A和B,求A=AUB。

以下算法中用La,Lb表示A和B。

La=(10,9,8,7,6) Lb=(1,2,3,4,5,6)

void union(List &La,List Lb)

{ La_len=ListLength(La);

Lb_len=ListLength(Lb);

for(i=1;i<=Lb_len;i++) //O(Lb_len)

{ GetElem(Lb,i,e);

if(!LocateElem(La,e,equal)) //O(La_len)

ListInsert(La,++La_len,e);

} }

2.1、2.2习题:

一.选择填空题:

(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(1)。

A.110

B.108

C.100

D.120

(2)在一个长度为n的向量的第i个元素之前插入一个

元素时,需向后移动(n-i+1)个元素。(1<=i<=n+1)

(3)在一个长度为n的向量中删除第i个元素时,需向前移动(n-i)个元素。其中:1<=i<=n

二.算法题

1:已知一个向量A,其中的元素按值非递减有序排列,编写一个函数插入一个元素x后保持该向量仍按非递减有序排列。

2:已知一个向量中的元素按元素值非递减有序排列,编写一个函数删除向量中多余的值相同的元素。

1. 解:本题的算法思想是:先找到适当的位置,然后后移元素空出一个位置,再将x插入。实现本题功能的函数如下:

void insert(int A[ ],int n,x)

{

int i,j;

if(x>=A[n]) A[n+1]=x;

else

{

数据域指针域

i=1;

while(x>=A[i]) i++;

for(j=n;j>=i;j--)A[j+1]=A[j];

A[j]=x; n++;

}

}

2:已知一个向量中的元素按元素值非递减有序排列,编写一个函数删除向量中多余的值相同的元素。

解:本题的算法思想是:由于向量中的元素按元素值非递减有序排列,值相同的元素必为相邻的元素,因此依次比较相邻两个元素,若值相同,则删除其中一个,否则继续向后查找。实现本题功能的函数如下:

void del(int A[ ],int n) // 1,2,3,4,4,5…

{

int i=1;j;

while(i<=n-1)

if (A[i] != A[i+1]) i++;

else

{

for(j = (i+2);j<=n; j++)

A[j-1]=A[j];

n--;

}

}

例1 线性表(ZHAO,QIAN,SUN,LI,ZHOU,WU,ZHENG,WANG)

课本P27

课堂练习:建立一个有n个结点,并且带头结点单链表。

typedef struct LNode

{ int data;

struct LNode *next;}LNode;

LNode* creat(int n)

{ LNode *head,*p,*r;

int x ,j;

head=new LNode;

r=head;

for(j=0;j

{ cin>>x;

p=new LNode;

p->data=x;

r->next=p;

r=p;}

p->next=NULL;

return head; }

void main()

{LNode*head=creat(5);…}

练习题:写出在静态链表中实现插入和删除操作的算法。

例:有两个循环单链表,(不带头结点)链表头指针分别为head1和head2,编写一个函数将链表head2接到head1之后,链接后的链表仍保持是循环链表形式。

解:本题的算法思想是:先找到两链表的尾指针,将第一个链表的尾指针与第二个链表的头结点链接起来,再使之成为循环的链表。

LinkList connect(LinkList head1, LinkList head2)

{ p=head1; //找head1的表尾,用p指向它

while ( p->next != head1)

p=p->next;

q=head2; //找head2的表尾,用q指向它

while ( q->next != head2)

q=q->next;

p->next=head2; //将head2链表接到head1链表后

q->next=head1; //保持循环链表

return(head1);

}

课堂练习:

已知一个单链表head,编写一个函数从此单链表中删除自第i个元素起的len个元素。

void deletelen(LNode *head, int i, int len)

{ LNode *p,*q; int j;

if (i==1)

for( j=1;j<=len;j++) //*p指向要删除的结点

{ p=head; head=head->next; free(p);}

else

{ p=head;

for(j=1;j<=i-2;j++) p=p->next; // *p指向要删除结点的前一个

for(j=1;j<=len;j++) //*q指向要删除的结点

{ q=p->next; p->next=q->next; free(q); }

}

2.3 ,2.4 习题:

一.单选和填空题:

1.不带头结点的单链表head为空的判定条件是___,

带头结点的单链表head为空的判定条件是___,

A. head=NULL

B. head next=NULL

C Head next=head D. head !=NULL

2. 非空的循环单链表head的尾结点(由p指向)满足____.

A p->next==NULL B. p==NULL

C. p->next==head

D.p==head

3.在循环双链表的p所指结点之后插入s所指结点的操作是___.

4.在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行_____.

填空题答案

3.s->prior=p; s->next=p->next p->next->prior=s; p->next=s;

4. q->next=s; s->next=p;

二、算法设计题

1. 有一个4个结点的单链表head=(a,b,c,d),设计一个函数将该单链表转换为head=(b,a,c,d)。

2. 设有一个循环双链表,其中有一个结点的指针为p,编写一个函数将p与其右边的一个结点进行交换。

1.node* change(node* head)

{ node *p; p=head->next;

head->next=p->next;

p->next=head; head=p; return head;

}

2.void change(DuLinkList p)

{DuLinkList q;

q=p-next;

q->prior=p->prior;

p->prior->next=q;

q->next->prior=p;

p->next=q->next;

q->next=p;

p->prior=q;

}

课程设计题:

1. 已知一个单循环链表rear如下图所示,编写一个函数,将所有的箭头方向取反。

单链表的结点定义如下(适用于1、3题):

struct node

{ int data;

struct node *next;};

2. 某百货公司仓库中有一批电视机,按其价格从低到高的次序构成一个循环单链表,每个结点有价格、数量和链指针三个域,现新到m台价格为h的电视机,编写一个函数修改原循环链表。

3.按如下主函数的格式,将下列程序补充完整,并上机运行。

其中,creat为创建链表子函数,invert为反转链表子函数,visit为遍历子函数。

void main()

{ node *h1,*h2;

h1=creat( ); //创建链表h1

visit(h1); //遍历链表h1

h2=invert(node *head);//反转链表h1为h2

visit(h2); //遍历h2

}

void visit(node *head)

{

……

}

课程设计题答案:

1.已知一个单循环链表,编写一个函数,将所有箭头方向取反。

本题算法的思想是从头到尾扫描该循环链表,将第一个结点的next域置为NULL,将第二个结点的next域指向第一个结点,如此知道最后一个结点,用head指向它。由于是循环链表,所以判定最后一个结点时不能用p->next=NULL作为条件,而是用q指向第一个结点,以p!=q作为条件。

void invert(Lnode *h)

{ Lnode *p, *q, *r;

p=head;

q=p->next; //指向数据为a1的结点

while( p!=q ) //p不是第一个结点时循环

{ r=q;

while ( r->next!=p )

r=r->next;

p->next=r; //结点的next 域逆向

p=p->next;

}

q->next=head; //数据域为a1 的结点next 指向head所指的结点

}

2. 某百货公司仓库中有一批电视机,按其价格从低到高的次序构成一个循环单链表,每个结点有价格、数量和链指针三个域,现新到m台价格为h的电视机,编写一个函数修改原循环链表。

解:以题意建立如下链表结构:

struct list

{ float price; //价格域

int number; //数量域

struct list *next; //链指针域

};

Struct list *insert(struct list head, int m, float h)

{ struct list *q,*s;

s=(struct list)malloc( sizeof(struct list) );

s->price=h; s->number=m;

if (head==NULL) //该链表为空时建立一个循环链表

{ head=s; head->next=head; }

else

{ if ( head->price > h) //第一个结点price域小于h,s为第一结点插入

{ q=head->next; //查找最后一个结点,由q指向

while(q!=head ) q=q->next;

s->next=head;

head=s;

q->next=head;

}

else

{q=head->next; //查找相应结点(q指向),在之后插入s结点

while(q->pricenext;

s->next=q->next;

q->next=s; } } return (head); } 第三章

课堂练习:

输入十个整数,然后按照相反的次序输出.

练习答案:

void main()

{ int a[10],i;

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

cin>>a[i];

for(i=9;i>=0;i--)

cout<

}

思考:对一维数组a[10]中所存储的数据,按照什么数据结构进行处理的?

课后练习:试写出以数组高端为底的栈的入栈和出栈算法。

练习题:

假设一个算术表达式中包含圆括弧、方括弧和花括弧三种类型的括弧,编写一个判别表达式中括弧是否正确配对的函数correct(exp,tag);其中:exp为字符串类型的变量,表示被判别的表达式,tag为布尔型变量。

解:本题使用一个栈st进行判定(栈顶指针top, 指向实际栈顶位置),将‘(’、‘[’或‘{’入栈,当遇到‘)’、‘]’或‘}’时,检查当前栈顶元素是否是对应的‘(’、‘[’或‘{’,若是则退栈,否则返回表示不配对。当整个算术表达式检查完毕时栈为空,表示括号正确配对;否则不匹配。

假设输入的算术表达式为:{ 10*[(12+23)/24 ]/2}

#define m 100 /*m为算术表达式中最多字符个数*/

bool correct(char exp[m],int tag)

{

char st[m]; int top=0;

tag=1;i=0;

while(i<=m && tag)

{

if(exp[i]==‘(’||exp[i]==‘[’||exp[i]==‘{’)// 此时入栈

{ top++; st[top]=exp[i]; }

if(exp[i]==‘)’) //{ 10*[(12+23)/24 ]/2}

if( st[top]==‘(’) top- -;

else tag=0;

if(exp[i]==‘]’)

if( st[top]==‘[’) top- -;

else tag=0;

if( exp[i]==‘}’)

if( st[top]==‘{’) top- -;

else tag=0;

i++;

}

if(top>0) tag=0; /*若栈不空,则不配对*/

return tag; }

例:使用一个计数器记录队列中元素的总数,可以判断队列是“空”还是“满”。下面我们用该方法实现循环队列上的六种基本操作,为此先给出循环队列的类型定义。

#define QueueSize 100

typedef char DataType;

typedef Struct{

int front;

int rear;

int count;

datatype data[QueueSize] //字符数组data

} cirqueue;

(1)置空队

void initqueue(cirqueue *q){

q–>front=q–>rear=0;

q–>count=0;

}

(2)判断队空

bool queueempty(cirqueue *q) {

return q–>count==0;

}

(3)判断队满

bool queuefull(cirqueue *q){

return q–>count==QueueSize;

}

(4)入队

int enqueue(cirqueue *q,datatype x)

{

if( queuefull(q) )

error(“queue overflow”);

q–>count++;

q–>data[q–>rear]=x;

q–>rear=(q–>rear+1)%QueueSize;

return q –>rear ;

}

(5)出队

datatype dequeue(cirqueue *q)

{

datatype temp;

if(queueempty(q))

error(“queue underflow”);

temp=q–>data[q–>front];

q–>count--;

q–>front=(q–>front+1)%queuesize;

return temp;

}

(6)取头指针所指元素

datatype queuefront(cirqueue *q)

{

if(queueempty(q))

error(“queue is empty.”);

return q–>data[q–>front];

}

练习题:

单项选择题:

一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是——。

A. edcba

B. decba

C. dceab

D.abcde

2. 循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front 和rear,则当前队列中的元素个数是——。

A. (rear-front+m)%m

B. rear-front+1

C. Rear-front-1

D. rear-front

填空题:

1.线性表、栈和队列都是(线性)结构,可以在线性表的(任何)位置插入和删除元素;对于栈只有在(栈顶)插入和删除元素;对于队列只能在(队尾)插入元素和在(队头)删除元素。

2.栈的插入和删除运算只能在栈的顶端进行,后进栈的元素必定先被删除,所以又把栈称作(后进先出)表;队列的插入和删除运算分别在两端进行,进行插入的一端叫做(队尾),进行删除的一端叫做(队头),先进队的元素必定先出队,所以又把队列称作(先进先出)表。

3. 设有一空栈,现有输入序列1,2,3,4,5,经过push, push, pop, push, pop, push, push 后,输出序列是(2,3)。

第四章

例一:串的定长顺序存储表示算法

void concat ( sstring s1, s2, t) //s1=“abcde”; s2=“fghijk”;

{ int i;

cout<< s1<

if (s1[0]+s2[0]>MAXSTRLEN)

cout<<“上溢\n”; //溢出处理

else

{ for(i=1;i<=s1[0];i++)

t[i]=s1[i]; //将s1串传给t

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

t[s1[0]+i]=s2[i]; //s2传给t

t [s1[0]+s2[0]+1]= ‘\0’;

t[0]=s1[0]+s2[0];

}

}

例二算法4.4(P75)

习题与练习

一、基本知识题

1. 空串与空格串有何区别?

2. 已知两个串为

A=’ac cab cabcbbca’

B=’abc’

判断B串是否是A串的子串,如果是其子串,说明起始点是A串的第几个字符。

3. 串是一种特殊的线性表,其特殊性体现在什么地方?

4. 串的两种最基本的存储方式是什么?

5. 两个串相等的充分必要条件是什么?

模式匹配BF(布鲁特福斯算法)

(串的顺序存储结构)

Int Index (sstring S, sstring T, int pos)

{ i=pos; j=1;

while (i<=strlength(S)&&j<=strlength(T))

{ if (S[i]= =T[j]) {++i; ++j;}

else {i=i-j+2; j=1;} // i 值依次移到下一个位置

} // j 回到起始位置

if (j>strlength(T)) return i-strlength(T);

else return 0;

}//index

第四章作业答案:

1.void deletesub(SString r, int i,int j )

{ if(i+j-1>r[0])

cout<<“出界\n”;

else

{ for(k=i+j; k<=r[0]; k++)

r[i]=r[k];

r[0]=r[0]-j;

}

}

第四章作业答案:

2.void replace(LinkString *h, char c,char s )

{

LinkString *p;

p=h;

while(p!=NULL)

{

if(p->data==‘c’)

p->data=‘s’;

p=p->next;

}

}

第五章

课堂练习:画出p97图5.5矩阵M的十字链表顺序存储表示。

第六章

习题1:

一、单项选择题

1.设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为( B )。

A、2h

B、2h-1

C、2h+1

D、h+1

2、按照二叉树的定义,具有3个结点的二叉树有( C )种。

A、3

B、4

C、5

D、6

3、深度为5的二叉树至多有( C )个结点。

A、16

B、32

C、31

D、10

4、对一个满二叉树,m个树叶,n个结点,深度为h,则(D )。

A、n=h+m

B、h+m=2n

C、m=h-1

D、n=2h-1

5、在一棵二叉树中,度为2的结点数为15个,度为1的结点数为32个,则叶子结点数为( D )个。

A、47

B、17

C、15

D、16

6、一棵二叉树的结点数为18个,则它的最小高度为(B ),最大高度为( D )。

A、4

B、5

C、6

D、18

课堂练习:

定义出数据结点同构与结点不同构的存储结构;

分别用以上两种存储结构将下图表示出来。(课本第一页的图)

答案:

结点同构:

Typedef struct tnode{

datatype data;

struct tnode *ch1,*ch2,*ch3}stnode,*stree;

结点不同构:

Typedef struct tnode{

datatype data;

datatype degree;

struct tnode *ch1*ch2,*ch3}stnode,*stree;

课堂练习:分别给出三种遍历的序列:

(1).先序:12485367

中序:84251637

后序:84526731

(2).先序:ABDHIECFJKMGL

中序:HDIBEAJFMKCGL

后序:HIDEBJMKFLGC

二.填空题

1.指出树和二叉树的三个主要差别

(1)树中结点的最大度数没有限制,而二叉树结点的最大度数为2

(2)树的结点无左右之分,而二叉树的结点有左右之分。

(3)有序树的结点有一个孩子结点时无左右之分,而二叉树有左右之分。

2.深度为k的完全二叉树,至少有(2的(k-1))个结点,至多有(同上)个结点,若按自上而下,从左到右次序给结点编号(从1开始),则编号最小的叶子结点的编号是(2的(k-2)+1 )。

3.在树形结构中,树根结点没有( 前驱)结点,其余每个结点有且只有( 1)个前驱结点;叶子结点没有( 后继)结点, 其余每个结点的后续结点可以( 等于多于一个)。

4.在一棵二叉树中,度为零的结点数为n0,度为2的结点数为n2,则n0=(n2+1 )。

5、一棵二叉树的第i 层(i≥1)上至多有(2的(i-1))个结点;一棵有n(n>0)个结点的满二叉树共有(2[log2n] )叶子和(2[log2n]-1 )个非终端结点。

解: 设该树的层数为k,则n=2k-1, k=log2n+1

∵该二叉数为满二叉数, ∴叶子结点在第k层上,

根据性质3,1, 第k层上的结点个数即叶子个数为:

2k-1=2[log2n]+1-1=2[log2n]

非终端结点个数即第1层到k-1层共有多少个结点,

根据性质2,结点个数为: 2k-1-1.将k代入即可.

习题2:

1、试找出分别满足下面条件的所有二叉树:

(1)先序序列与中序序列相同;习题2:

1、试找出分别满足下面条件的所有二叉树:

(1)先序序列与中序序列相同;右单支二叉树

(2)中序序列与后序序列相同;左单支二叉树

(3)先序序列与后序序列相同;只有根结点

2、已知二叉树的中序序列与后序序列分别为DEBAC和DABEC,给出这棵二叉树的先序序列。CEDBA

3、二叉树先序序列中,任意一个结点均处在其子女结点的前面,是否正确(正确)作业:

1.对采用二叉链表存储的一棵二叉树,写出中序遍历的递归与非递归算法

2. 求一棵二叉树的深度的递归算法。

课堂练习:

画出右下二叉树的

中序线索二叉树。(图4)

课堂练习

已知一棵二叉树的中序序列为:cbedahgijf,后序序列为:cedbhjigfa, 画出该二叉树的先序线索二叉树.

例有4个结点,权值分别为7,5,2,4,构造有4个叶子结点的二叉树

课堂练习:

以数据集{4,5,6,7,10,12,18}为节点权值,构造一棵Huffman树,并求

出带权路径长。

第六章课程设计题:

采用二叉链表存储结构,构造一棵二叉树,并按先序,中序,后序遍历顺序输出。

习题答案:

1.写出中序遍历二叉树的递归和非递归算法。

void inorder(BiTree,p)

{

if(p!=NULL)

{ inorder(p->lchild);

printf(p->data);

inoder(p->rchild);

}

}

2.求一棵二叉树的深度的递归算法。

算法分析:若一棵二叉树为空则深度为0,否则其深度等于左子树或右子树的最大深度加1,即有如下递归模型:

depth(p)=0 //p为二叉树的根结点指针

depth(p)=max(depth(p->lchild,p->rchild)+1

int depth(BiTree p)

{ int dep1,dep2;

if(p==NULL) return 0;

else { dep1=depth(p->lchild);

dep2=depth(p->rchild);

if(dep1>dep2) return (dep1+1);

else return(dep2+1);

}

}

第七章

1.已知给定有向图如下图:

(1) 分别写出每个顶点的入度与出度;

(2) 画出相应的邻接矩阵与邻接表;

(3) 画出强连通分量。

2.已知给定无向图如下图:

画出相应的邻接矩阵与邻接表

3.已知一个具有n个顶点的无向图采用邻接表存储方法。试设计一个算法,删除图中一条边。

练习题:

某航空公司在六个城市设有分公司V1,V2,V3,V4,V5,V6;矩阵A中元素A[i,j]是Vi 到Vj的飞机票价。试为该航空公司制作一张由V1到各分公司去的最便宜的通航线路图。

0 50 ∞ 40 25 10

50 0 15 20 ∞ 25

∞ 15 0 10 20 ∞

A= 40 20 10 0 10 25

25 ∞ 20 10 0 55

10 25 ∞ 25 55 0

作业:

编写一个实现连通图G的深度优先遍历(从顶点V出发)的递归函数.假设该图的存储结构采用邻接表.

以上程序完成后,上机调试。

第九章

课堂练习:

假定一组关键字为:

{36,75,83,54,12,67,60,40,92,72},试依次插入结点生成一棵二叉排序树。例已知一组关键字(19,14,23,1,68,20,84,27,55,11,10,79)

哈希函数为:H(key)=key MOD 13, 哈希表长为m=16,

设每个记录的查找概率相等

(1)用线性探测再散列处理冲突,即Hi=(H(key)+di) MOD m

(2)(2) 用链地址法处理冲突

课堂练习:

设有一组关键字{19,01,23,14,55,20,84,27,68,11,10,77},采用哈希函数:H(key)=key Mod 13

采用开放地址法的线性探测再散列方法解决冲突,试在0~18的散列地址空间中对该关键字序列构造哈希表。

第十章

课堂练习:

已知序列{53,8,50,6,90,17,89,27},

(1). 给出采用快速排序法对该序列作升序排序的每一趟结果;

(2).给出采用堆排序法对该序列作升序排序的每一趟结果;

数据结构整理完整版

第二章线性表 一、顺序表和链表的优缺点 1.顺序表 定义:用一组连续的存储单元(地址连续)依次存放线性表的各个数据元素。即:在顺序表中逻辑结构上相邻的数据元素,其物理位置也是相邻的。 优点 逻辑相邻,物理相邻 可随机存取任一元素 存储空间使用紧凑 缺点 插入、删除操作需要移动大量的元素(平均约需移动一半结点,当n很大时,算法的效率较低) 预先分配空间需按最大空间分配,利用不充分 表容量难以扩充 2.链式存储结构 定义:由分别表示a1,a2,…,a i-1,a i,…,a n的N 个结点依次相链构成的链表,称为线性表的链式存储表示 优势: (1)能有效利用存储空间; 动态存储分配的结构,不需预先为线性表分配足够大的空间,而是向系统“随用随取”,在删除元素时可同时释放空间。 (2)用“指针”指示数据元素之间的后继关系,便于进行“插入”、“删除”等操作; 插入或删除时只需要修改指针,而不需要元素移动。 劣势: (1)不能随机存取数据元素; (2)丢失了一些顺序表的长处,如线性表的“表长”和数据元素在线性表中的 “位序”,在单链表中都看不见了。如,不便于在表尾插入元素,需遍历整个表才能找到插入的位置。 二、单链表中删除一个节点和插入一个节点的语句操作,p29 1.插入元素操作 算法基本思想:首先找到相应结点,然后修改相应指针。 假定在a,b之间插入结点X,s指向X, p指向a,指针修改语句为: s->next=p->next; p->next =s;

2.删除元素操作 算法基本思想:首先找到第i-1 个结点,然后修改相应指针。 删除b结点,其中,P指向a,指针修改语句为:p->next=p->next->next; 三、单链表的就地逆置习题集2.22 算法的基本思想:以单链表作存储结构进行就地逆置的正确做法应该是:将原链表的头结点和第一个元素结点断开(令其指针域为空),先构成一个新的空表,然后将原链表中各结点,从第一个结点起,依次插入这个新表的头部(即令每个插入的结点成为新的第一个元素结点)。 算法思路:依次取原链表中的每个结点,将其作为第一个结点插入到新链表中去,指针p用来指向当前结点,p为空时结束。 void reverse (Linklist H){ LNode *p; p=H->next; /*p指向第一个数据结点*/ H->next=NULL; /*将原链表置为空表H*/ while (p){ q=p; p=p->next; q->next=H->next; /*将当前结点插到头结点的后面*/ H->next=q; } } 第三章栈和队列 一、栈和队列的特性 1.特点 栈必须按“后进先出”(LIFO)的规则进行操作,仅限在表尾进行插入和删除的操作。 队列(FIFO)必须按“先进先出”的规则进行操作,队尾插入,队头删除。 二、循环队列为空和满的判定方法,p63 队空条件:front == rear; 队满条件:(rear + 1) % maxSize == front

广州大学专插本心得

本人是今年考上广州大学计算机专业的,说真的,专插本这条路并不好走,很辛苦!但是当你知道自己考上了,那感觉是相当激动的!! 2011年高考成绩揭晓,我就过了3A二分而已,那时候心情很沉重,只有3条路可以选择,第一是复读第二就是读3A尾的学校第三就是去打工,最后的抉择是报了中山火炬技术学院(全省专科不知道是倒数第二还是倒数第三的学校) 2011年九月带着沉重的心情来到了中山火炬技术学院,这学校名气小的可怜,问了N多人都没人知道这学校,学校也小的可怕,十几分钟就可以走完,当时感觉自己很悲剧,上了这样的学校很没面子,因此痛下决心来不管怎么样要往上爬,从一个师兄那里听说可以插本,考到的话第一学历是本科,但是听说插本很难,比高考,考研究生还要难上百倍,便没怎么想插本了,还是专心学好大专的专业吧 一转眼,2年过去了,到了大三,很多同学都去实习了,我又一次走到人生十字路口上,是去工作还是去插本,经过几天考虑还是决定插本了,因为第一我觉的要进好的企业需要本科第二我不想那么快工作,那时候作出插本决定已经是9月底了,中山火炬技术学校插本的人很少,所以只好通过加插本QQ群来了解插本信息 因为本人不想给家庭负担所以没有参加任何培训班,刚开始复习全靠自己摸索着的,很痛苦,哪里是重点哪里不是重点都不知道,幸亏在进群之后知道考纲这回事,慢慢的走上了复习的正规道路,每天8点就起来看书,除开吃饭上厕所什么的离开一下教室其他都是在教室看书,一直看到晚上10点钟,回到宿舍继续看书,因为宿舍没人,所以看到2点左右才睡觉,每个星期抽出半天去放松,这样才能保证效率,那时候备考时候真是很无聊很痛苦,知道不少人都已经放弃了,但是还是坚持到最后,3月去广州考试,看见考广大计算机人400多人,心里有点怕怕的,但是马上调整好心态,心里说怕什么,大不了考不上去工作呢,在考试那2天就浏览一下书本和总结的考点,考完也不去想考试结果,因为没有什么意义了,四月八出成绩了,当时心里发毛了,因为说不担心那是假的,我是先要我舍友帮我查的,她说过了,我还是担心,最后自己鼓起勇气查的,当我点一下鼠标的那一刻眼睛是闭着的,闭了好久才敢看成绩。当时自己惊叫了起来:过了过了,战争终于结束了。自己也没想到会考的这么好,它见证了我几个月的付出是值得的好了,啰嗦了那么多,不知道说了这么多大家看了是什么心情,写的乱七八糟的,不过都是个人真实感受,现在就分享一下我各科复习经验吧 政治 这个是最恶心的科目,我用最多时间来备考这科,因为高中读的是理科,对它不感冒,但是考了67分,虽然不是很高分,但是我已经很满足了,现在谈谈这科复习方法,我10月开始看政治书的,一天一章的看,看到11月,看了大概四次书本,你会问为什么要看书,很简单,因为政治选择题很坑爹,不少题目是书本的,但是考纲没有的,12月开始之后,我就根据录音去划书,整理笔记,然后开始背,每个白天抽3小时背政治,然后晚上回宿舍打开电脑用 1小时选择题,培养做题感觉,到一月中,开始做历年真题,并把考过的大题给划掉,重点背那些没出的,没背熟的反复的背和默写,要是你学我这样做,我想政治可以个满意的分数。 英语

数据库概论 习题参考答案

第1章绪论习题参考答案 1、试述数据、数据库、数据库管理系统、数据库系统的概念。(参见P3、4、5页) 参考答案: 描述事物的符号记录称为数据;数据库是长期储存在计算机内的、有组织的、可共享的数据集合;数据库管理系统是位于用户与操作系统之间的一层数据管理软件; 数据库系统是指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。 2.使用数据库系统有什么好处?(参见P12页) 参考答案: 数据库系统使信息系统从以加工数据的程序为中心转向围绕共享的数据库为中心的阶段,这样既便于数据的集中管理,又有利于应用程序的研制和维护,提高了数据的利用率和相容性,提高了决策的可靠性。 3.试述文件系统与数据库系统的区别和联系。(8、9、10页) 参考答案: 1)数据结构化是数据库与文件系统的根本区别。 在文件系统中,相互独立的文件的记录内部是有结构的,管其记录内部已有了某些结构,但记录之间没有联系。数据库系统实现整体数据的结构化,是数据库的主要特征之一。 2)在文件系统中,数据的最小存取单位是记录,粒度不能细到数据项。而在数据库系统中,存取数据的方式也很灵活,可以存取数据库中的某一个数据项、一组数据项一个记录或或一组记录。 3)文件系统中的文件是为某一特定应用服务的,文件的逻辑结构对该应用程序来说是优化的,因此要想对现有的数据再增加一些新的应用会很困难,系统不容易扩充。而在数据库系统中数据不再针对某一应用,而是面向全组织,具有整体的结构化。5.试述数据库系统的特点。(9、10、11页) 参考答案: 数据结构化;数据的共享性高、冗余度低、易扩充;数据独立性高;数据由DBMS统一管理和控制。 6.数据库管理系统的主要功能有哪些? (4页)

(完整版)非常实用的数据结构知识点总结

数据结构知识点概括 第一章概论 数据就是指能够被计算机识别、存储和加工处理的信息的载体。 数据元素是数据的基本单位,可以由若干个数据项组成。数据项是具有独立含义的最小标识单位。 数据结构的定义: ·逻辑结构:从逻辑结构上描述数据,独立于计算机。·线性结构:一对一关系。 ·线性结构:多对多关系。 ·存储结构:是逻辑结构用计算机语言的实现。·顺序存储结构:如数组。 ·链式存储结构:如链表。 ·索引存储结构:·稠密索引:每个结点都有索引项。 ·稀疏索引:每组结点都有索引项。 ·散列存储结构:如散列表。 ·数据运算。 ·对数据的操作。定义在逻辑结构上,每种逻辑结构都有一个运算集合。 ·常用的有:检索、插入、删除、更新、排序。 数据类型:是一个值的集合以及在这些值上定义的一组操作的总称。 ·结构类型:由用户借助于描述机制定义,是导出类型。 抽象数据类型ADT:·是抽象数据的组织和与之的操作。相当于在概念层上描述问题。 ·优点是将数据和操作封装在一起实现了信息隐藏。 程序设计的实质是对实际问题选择一种好的数据结构,设计一个好的算法。算法取决于数据结构。 算法是一个良定义的计算过程,以一个或多个值输入,并以一个或多个值输出。 评价算法的好坏的因素:·算法是正确的; ·执行算法的时间; ·执行算法的存储空间(主要是辅助存储空间); ·算法易于理解、编码、调试。 时间复杂度:是某个算法的时间耗费,它是该算法所求解问题规模n的函数。 渐近时间复杂度:是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。 评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度。 算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。 时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O (n^2)、立方阶O(n^3)、……k次方阶O(n^k)、指数阶O(2^n)。

《数据结构》(专科)已完成

数据结构,专科 一、简答题( 1、假设一个有向图的顶点集合V={c1,c2,c3,c4,c5},弧集 S={,,,,,}, (1)试根据上述关系,画出该有向图;(2)该图有环吗?若无 环,则写出它的一个拓扑有序序列;若有环,请写出组成环的顶点序列。 答: 2、已知某二叉树的先序序列为{ ABHFDECKG },中序序列为 { HBDFAEKCG }, 画出该二叉树。 答:二叉树是 a / \ b e / \ \

h f c / / \ d k g 后序是hdfbkgcea 3、已知关键字序列{70,83,100,65,10,9,7,32},现对其 从小到大排序,写出快速排序每一趟结束时的关键字状态。 答#include int main() { int i,j,t; int a[7]={70,83,100,65,10,32,7,9}; for(j=0;j<6;j++)//进行6次循环 for(i=0;i<6-j;i++)// 每次实现6-j次循环 if(a[i]>a[i+]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; }//每次a[i]与a[i+1]比较,大的就调换两者位置 for(i=0;i<7;i++) printf("%d ",a[i]); }

譬如第一次结果就是70,83,100,65,10,32,7,9 70比83小,所以位置没变。。 4、设s="I AM A WORKER",t=" GOOD",q=" WORKER"。求: StrLength(s),StrLength(t) ,SubString(s,8,6) , Index(s,q,1) 。 答:strlength(s)=14;strlength(t)=4;substr(s,8,6)=worker;substr(s,q,1)=o; 5、在单链表中设置头结点有什么作用? 答:头结点就是在单链表的开始结点之前附加的一个结点,设置头结点的优点有两个:(1)由于开始结点的位置被存放在头结点的指针域中,所以在链表的第一个位置上的操作就和在表的其他位置上一样,无须进行其他特殊处理;(2)无论链表是否为空,其头指针是指向头结点的非空指针(空表中头结点的指针域空),因此空表和非空表的处理也就一样了。 6、设哈希函数H(key)=key MOD 13,用线性探测再散列法解决 冲突。对关键字序列{ 55,19,01,68,23,27,20,84 } 在地址空间为0-10的散列区中建哈希表,画出此表,并求等 概率情况下查找成功时的平均查找长度。

数据结构基础知识大全

/** *名词解释1、数据:是信息的载体,能够被计算机识别、存储和加工处理。 *2、数据元素:是数据的基本单位,也称为元素、结点、顶点、记录。一个数据元素可以由若干个数据项组成,数据项是具有独立含义的最小标识单位。 *3、数据结构:指的是数据及数据之间的相互关系,即数据的组织形式,它包括数据的逻辑结构、数据的存储结构和数据的运算三个方面的内容。 *4、数据的逻辑结构:指数据元素之间的逻辑关系,即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。 *5、数据的存储结构:指数据元素及其关系在计算机存储器内的表示。是数据的逻辑结构用计算机语言的实现,是依赖于计算机语言的。 *6、线性结构:其逻辑特征为,若结构是非空集,则有且仅有一个开始结点和一个终端结点,并且其余每个结点只有一个直接前趋和一个直接后继。 *7、非线性结构:其逻辑特征为一个结点可能有多个直接前趋和直接后继。 *8、算法:是任意一个良定义的计算过程,它以一个或多个值作为输入,并产生一个或多个值作为输出;即一个算法是一系列将输入转换为输出的计算步骤。 *9、算法的时间复杂度T(n):是该算法的时间耗费,它是该算法所求解问题规模n趋向无穷大时,我们把时间复杂度T(n)的数量级(阶)称为算法的渐近时间复杂度。 *10、最坏和平均时间复杂度:由于算法中语句的频度不仅与问题规模n有关,还与输入实例等因素有关;这时可用最坏情况下时间复杂度作为算法的时间复杂度。而平均时间复杂度是指所有的输入实例均以等概率出现的情况下,算法的期望运行时间。 *11、数据的运算:指对数据施加的操作。数据的运算是定义在数据的逻辑结构上的,而实现是要在存储结构上进行。 *12、线性表:由n(n≥0)个结点组成的有限序列。其逻辑特征反映了结点间一对一的关系(一个结点对应一个直接后继,除终端结点外;或一个结点对应一个直接前趋,除开始结点外),这是一种线性结构。 *13、顺序表:顺序存储的线性表,它是一种随机存取结构。通过将相邻结点存放在相邻物理位置上来反映结点间逻辑关系。 *14、单链表:每个结点有两个域:一个值域data;另一个指针域next,用来指向该结点的直接后继结点。头指针是它的充分必要的信息。单链表是一种单向的结构。 *15、双链表:每个结点中增加了一个prior,用来指向该点的直接前趋结点。它是一种双向、对称的结构。 *16、循环链表:是一种首尾相接的链表。单循环链表形成一个next链环,而双循环链表形成next链环和prior链环。 *17、存储密度:是指结点数据本身所占的存储量和整个结点结构所占的存储量之比。顺序表的存储密度为1,而链表的存储密度小于1。 *18、栈:只允许在一端进行插入、删除运算的线性表,称为“栈”(stack)。 *19、LIFO表:即后进先出表,修改操作按后进先出的原则进行。譬如栈就是一种LIFO 表。 *20、顺序栈:采用顺序存储结构的栈,称为顺序栈。 *21、链栈:采用链式存储结构的栈,称为链栈。 *22、队列:只允许在一端进行插入、另一端进行删除运算的线性表,称为“队列”(queue)。*23、FIFO表:即先进先出表。譬如队列就是一种FIFO表。 *24、顺序队列:采用顺序存储结构的队列,称为顺序队列。 *25、循环队列:为克服顺序队列中假上溢现象,将向量空间想象为一个首尾相接的圆环,

数据模型所描述的内容包括三个部分

数据模型所描述的内容包括三个部分:数据结构、数据操作、数据约束。 1)数据结构:数据模型中的数据结构主要描述数据的类型、内容、性质以及数据间的联系等。数据结构是数据模型的基础,数据操作和约束都建立在数据结构上。不同的数据结构具有不同的操作和约束。 2)数据操作:数据模型中数据操作主要描述在相应的数据结构上的操作类型和操作方式。 3)数据约束:数据模型中的数据约束主要描述数据结构内数据间的语法、词义联系、他们之间的制约和依存关系,以及数据动态变化的规则,以保证数据的正确、有效和相容。 数据模型按不同的应用层次分成三种类型:分别是概念数据模型、逻辑数据模型、物理数据模型。 1、概念数据模型(Conceptual Data Model):简称概念模型,主要用来描述世界的概念化结构,它使数据库的设计人员在设计的初始阶段,摆脱计算机系统及DBMS的具体技术问题,集中精力分析数据以及数据之间的联系等,与具体的数据管理系统(Database Management System,简称DBMS)无关。概念数据模型必须换成逻辑数据模型,才能在DBMS中实现。 概念数据模型是最终用户对数据存储的看法,反映了最终用户综合性的信息需求,它以数据类的方式描述企业级的数据需求,数据类代表了在业务环境中自然聚集成的几个主要类别数据。 概念数据模型的内容包括重要的实体及实体之间的关系。在概念数据模型中不包括实体的属性,也不用定义实体的主键。这是概念数据模型和逻辑数据模型的主要区别。 概念数据模型的目标是统一业务概念,作为业务人员和技术人员之间沟通的桥梁,确定不同实体之间的最高层次的关系。 在有些数据模型的设计过程中,概念数据模型是和逻辑数据模型合在一起进行设计的。 2、逻辑数据模型(Logical Data Model):简称数据模型,这是用户从数据库所看到的模型,是具体的DBMS所支持的数据模型,如网状数据模型(Network Data Model)、层次

专升本《数据结构》_试卷_答案

专升本《数据结构》 一、(共75题,共150分) 1. 数据的基本单位是()。(2分) A.数据元素 B.记录 C.数据对象 D.数据项 .标准答案:A 2. ()是数据的不可分割的最小单位。(2分) A.数据对象 B.数据元素 C.数据类型 D.数据项 .标准答案:D 3. 算法的空间复杂度是对算法()的度量。(2分) A.时间效率 B.空间效率 C.可读性 D.健壮性 .标准答案:B 4. ()是限制了数据元素的内部结构仅为一个字符的线性表。(2分) A.栈 B.队列 C.串 D.数组 .标准答案:B 5. 串的长度是指串中所含()的个数。(2分) A.不同字符 B.不同字母 C.相同字符 D.所有字符 .标准答案:D 6. 采用带头结点双向链表存储的线性表,在删除一个元素时,需要修改指针()次。(2分) A.1 B.2 C.3 D.4 .标准答案:B 7. 线性表的顺序存储结构是一种()的存储结构。(2分) A.顺序存取 B.随机存取 C.索引存取 D.Hash存取 .标准答案:B 8. 数组a[1..m]采用顺序存储,a[1]和a[m]地址分别为1024和1150,每个元素占2字节,则m是()。(2分) A.64 B.32 C.16 D.8 .标准答案:A 9. 深度为h的二叉树,第h层最多有()个结点。(2分) A.h B.2h-1 C.2h-1 D.2h .标准答案:C 10. m个结点的二叉树,其对应的二叉链表共有()个非空链域。(2分) A.m B.m+1 C.2m D.m-1 .标准答案:B 11. 下面叙述错误的是()。(2分) A.顺序表是借助物理单元相邻表示数据元素之间的逻辑关系 B.对于空队列进行出队操作过程中发生下溢现象 C.有向图的邻接矩阵一定是对称的 D.具有相同的叶子个数和具有相同的叶子权值的赫夫曼树不是唯一的 .标准答案:C 12. 以下与数据的存储结构无关的术语是()。(2分) A.循环队列 B.双向链表 C.哈希表 D.数组 .标准答案:D 13. 在一个长度为n的链式栈中出栈实现算法的时间复杂度为()。(2分) A.O(1) B.O(log n) C.O(n) D.O(n2) .标准答案:A 14. 在具有k个度数为2的二叉树中,必有()个叶子结点。(2分) A.k B.k-1 C.2k D.k+1 .标准答案:D 15. 在关键字序列(10,20,30,40,50)中,采用折半法查找20,关键字之间比较需要()次。(2分) A.1 B.2 C.3 D.4 .标准答案:C 16. 16某二叉树的后序遍历序列和和中序遍历序列均为abcd,该二叉树的前序遍历序列是()。(2分) A.abcd B.dcba C.acbd D.dbca .标准答案:B 17. n个顶点的无向连通图的生成树,至少有()个边。(2分) A.n(n-1) B.n(n-1)/2 C.2n D.n-1 .标准答案:D 18. 可以采用()这种数据结构,实现二叉树的层次遍历运算。(2分) A.队列 B.树 C.栈 D.集合 .标准答案:A

空间数据结构

空间数据结构 摘要:空间数据模型和空间数据结构是地理信息系统(GIS)课题的中心内容。本文对空间数据结构的定义、分类进行了一定的研究性的归纳与总结。 关键词:空间数据结构,矢量数据,栅格数据 引言 GIS中空间数据结构和空间数据模型是紧密相关的。数据模型的建立必须通过一定的数据结构,但两者之间也有非常大的区别。数据模型是一个总得概念,是人为概念化的真实,是对现实世界的提取,对现实世界的认识和选择。而数据结构指数据元素之间的相互关系,它是软件常规内涵,根据空间数据结构和数据模型的特点及其关系,可以建立空间数据库系统。 空间数据结构定义 空间数据结构是带有空间数据单元的集合。这些数据单元是数据的基本单 位,一个数据单元可以有几个数据项组成,数据单元之间存在某种联系叫做结构。 所以,研究空间数据结构,是指空间目标间的相互关系,包括几何和非几何的关 系,数据结构是数据模型的表述,数据结构往往通过一系列的图表和矩阵,以及 计算机码的数据记录来说明。 空间数据结构的分类 矢量数据结构 定义 矢量数据结构是基于矢量模型,利用欧几里得(EUCLID)几何学中的点、线、 面及其组合体来表示地理实体的空间分布,是通过记录坐标的方式,尽可能精确 地表示点线多边形等地理实体,自然地理实体的位置是用其在坐标参考系中的空 间位置来定义的,坐标空间设为连续,允许任意位置长度和面积的精确定义,其 特点是定位明显,属性隐含。 GIS采用的矢量数据结构模型,是将空间地质实体抽象成点、线、面三种几 何要素,矢量数据结构通过优化拓扑结构表达空间实体的相关关系,为空间数据 库建立基本框架。 矢量数据结构的特点 优点:数据按照点、线或多边形为单元进行组织,结构简单、直观、易实现 以实体为单位的运算和显示。 缺点:

2017年中山大学南方学院专插本《数据结构与算法》考试大纲

本科插班生考试大纲《数据结构与算法》 《数据结构与算法》专业课程考试大纲 考试科目名称:数据结构与算法 一、考试性质 普通高等学校本科插班生招生考试是由专科毕业生参加的选拔性考试。高等学校根据考生的成绩,按已确定的招生计划,德、智、体全面衡量,择优录取。该考生所包含的内容将大致稳定,试题形式多种,具有对学生把握本课程程度的较强识别、区分能力。 二.考试内容及要求 一、考试基本要求 通过数据结构与算法理论的学习,使学生学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及相应的算法,并初步了解对算法的时间分析和空间分析技术;配合算法设计和上机实践的训练,还应培养学生的数据抽象能力和程序设计的能力,对理论和实践的操作使学生得到全面的领会和深刻的认识。 二、考核知识点及考核要求 本大纲的考核中,按照“识记”、“领会”、“简单应用”和“综合应用”等四个层次规定应达到的能力层次要求。各能力层次为递进等级关系,后者必须建立在前者的基础上,其含义是: 识记:要求考生知道有关的名词、概念、原理、知识的含义,并能正确认识或识别。 领会:要求在识记的基础上,能把握相关的基本概念、基本原理和基本方法,掌握有关概念、原理、方法的区别与联系。 简单应用:要求在领会的基础上,运用所掌握的基本概念、基本原理和基本方法中的少量知识点,分析和解决一般的理论问题或实际问题。 综合应用:要求在简单应用的基础上,运用学过的多个知识点,综合分析和解决比较复杂的实际问题。

第1章绪论 一、考核知识点 1、数据结构的基本概念 2、抽象数据类型的表示和实现 3、算法的概念和特性 4、算法时间复杂度和空间复杂度分析 二、考核要求 1、识记 (1)数据结构的研究内容 2、领会 (1)抽象数据类型的表示和实现 (2)算法的定义和特性 (3)评价算法优劣的基本标准 3、简单应用 (1)简单数据结构的程序设计 (2)简单数据结构程序的时间复杂度和空间复杂度分析 4、综合应用 (1)数据结构的一些基本概念 (2)算法的时间复杂度分析 第2章线性表 一、考核知识点 1、线性表的类型定义 2、线性表的顺序表示和实现 3、线性表的链式表示和实现 4、线性表的应用

广东技术师范学院2018年专插本《计算机科学技术导论》考试大纲

广东技术师范学院 《计算机科学技术导论》(本科插班生入学考试)考试大纲 (计算机科学学院制定) 一、考试性质与试题命题的原则 《计算机科学技术导论》是广东技术师范学院为计算机科学与技术等专业的本科 插班生入学考试所设置的一个专业课考试科目。它的评价标准是高等学校计算机类专 业高职高专毕业生或相近专业毕业生能达到的及格或及格以上水平,以保证录取的本 科插班生具有一定的计算机科学基础理论及必要的专业技能能力,以利于择优选拔。 考试对象为参加教育部面向全面招生的本科插班生入学考试的高职高专毕业生以及 具有同等学历的报考人员。 《计算机科学技术导论》课程考试的目的和要求是:准确、简明地考核考生对计算机科学体系框架、计算机科学基本知识以及现代计算机发展方向、主要理论和科学方法的掌握和理解水平,衡量他们在理解、掌握和运用这些基本专业理论和知识的基础上,观察、分析和解决技术问题的能力。 二、考试形式及试卷结构 1.考试形式为闭卷、笔试;考试时间为120分钟,试卷满分为100分。 2、试题命制的原则:作为一项选拔性考试,《计算机科学技术导论》考试试题在设计上应具有较高的信度和效度、必要的区分度和合理的难度。命题根据本大纲规定的考试目标和考核内容,考试命题应具有一定的覆盖面且重点突出,侧重考核考生对本学科的基本理论、基本知识和基本技能的掌握程度,以及运用所学的知识解决实际问题的能力。 3.试题对不同能力层次要求的分数比例:识记25%、理解55%,综合应用15%,其他5%。 4.合理安排试题的难度结构。试题难易度分为易、较易、较难、难四个等级。试卷中难易度试题的分布比例,易约占25%,较易约占35%,较难约占20%,难约占10%。 5.试卷的题型有:单项选择题、多项选择题、简答题、改错题、计算题、填空题、综合题等。可根据考核要求,适当安排各种题型数量的比例,达到考核对知识点的识记、理解以及运用水平和能力。

数据库的体系结构

数据库基础 ( 视频讲解:25分钟) 本章主要介绍数据库的相关概念,包括数据库系统的简介、数据库的体系结构、数据模型、常见关系数据库。通过本章的学习,读者应该掌握数据库系统、数据模型、数据库三级模式结构以及数据库规范化等概念,掌握常见的关系数据库。 通过阅读本章,您可以: 了解数据库技术的发展 掌握数据库系统的组成 掌握数据库的体系结构 熟悉数据模型 掌握常见的关系数据库 1 第 章

1.1 数据库系统简介 视频讲解:光盘\TM\lx\1\数据库系统简介.exe 数据库系统(DataBase System,DBS)是由数据库及其管理软件组成的系统,人们常把与数据库有关的硬件和软件系统称为数据库系统。 1.1.1 数据库技术的发展 数据库技术是应数据管理任务的需求而产生的,随着计算机技术的发展,对数据管理技术也不断地提出更高的要求,其先后经历了人工管理、文件系统、数据库系统等3个阶段,这3个阶段的特点分别如下所述。 (1)人工管理阶段 20世纪50年代中期以前,计算机主要用于科学计算。当时硬件和软件设备都很落后,数据基本依赖于人工管理,人工管理数据具有如下特点: ?数据不保存。 ?使用应用程序管理数据。 ?数据不共享。 ?数据不具有独立性。 (2)文件系统阶段 20世纪50年代后期到60年代中期,硬件和软件技术都有了进一步发展,出现了磁盘等存储设备和专门的数据管理软件即文件系统,文件系统具有如下特点: ?数据可以长期保存。 ?由文件系统管理数据。 ?共享性差,数据冗余大。 ?数据独立性差。 (3)数据库系统阶段 20世纪60年代后期以来,计算机应用于管理系统,而且规模越来越大,应用越来越广泛,数据量急剧增长,对共享功能的要求越来越强烈。这样使用文件系统管理数据已经不能满足要求,于是为了解决一系列问题,出现了数据库系统来统一管理数据。数据库系统满足了多用户、多应用共享数据的需求,它比文件系统具有明显的优点,标志着管理技术的飞跃。 1.1.2 数据库系统的组成 数据库系统是采用数据库技术的计算机系统,是由数据库(数据)、数据库管理系统(软件)、数

数据结构

(1) The Linked List is designed for conveniently b data item. a. getting b. inserting c. finding d.locating (2) Assume a sequence list as 1,2,3,4,5,6 passes a stack, an impossible output sequence list Is c . a. 2,4,3,5,1,6 b.3,2,5,6,4,1 c.1,5,4,6,2,3 d.4,5,3,6,2,1 (3) A queue is a structure not implementing b . a. first-in/first-out b. first-in/last-out c. last-in/last-out d. first-come/first-serve (4) Removing the data item at index i from a sequential list with n items, d items need to be shifted left one position. a. n-i b. n-i+1 c. i d. n-i-1 (5) There is an algorithm with inserting an item to a ordered SeqList and still keeping the SeqList ordered. The computational efficiency of this inserting algorithm is c . a. O(log2n) b. O(1) c. O(n) d.(n2) (6) The addresses which store Linked List d . a. must be sequential b. must be partly sequential c. must be no sequential d. can be sequential or discontiguous (7) According the definition of Binary Tree, there will be b different Binary Trees with 5 nodes. a. 6 b. 5 c. 4 d. 3 (8) In the following 4 Binary Trees, c is not the complete Binary Tree. a b c d (9) A Binary Tree will have a nodes on its level i at most. a.2i b. 2i c.2i+1 d.2i-1 (10) If the Binary Tree T2 is transformed from the Tree T1, then the postorder of T1 is the b of T2. a. preorder b. inorder c. postorder d. level order (11) In the following sorting algorithm, c is an unstable algorithm. a. the insertion sort b. the bubble sort c. quicksort d. mergesort (12) Assume there is a ordered list consisting of 100 data items, using binary search to find a special item, the maximum comparisons is d . a. 25 b.1 c. 10 d.7 (13) The result from scanning a Binary Search Tree in inorder traversal is in c order. a. descending or ascending b. descending c. ascending d. out of order (14) The d case is worst for quicksort. a. the data which will be sorted is too larger. b. there are many same item in the data which will be sorted . c. the data will be sorted is out of order d. the data will be sorted is already in a sequential order. (15) In a Binary Tree with n nodes, there is a non-empty pointers. a. n-1 b. n+1 c. 2n-1 d.2n+1 (16) In a undirected graph with n vertexs, the maximum edges is b . a. n(n+1)/2 b. n(n-1)/2 c. n(n-1) d.n2 (17) The priority queue is a structure implementing c . a. inserting item only at the rear of the priority queue.

2019年本科插班生考试试题《数据结构》A试卷

韩山师范学院2019年本科插班生招生考试 计算机科学与技术 专业 数据结构 试卷(A 卷) 一、单项选择题(每题2分,共30分) 1. 由3个结点可以构造出多少种不同的二叉树?( ) A .2 B .3 C .4 D .5 2. 一个栈的输入序列为A B C ,则下列序列中不可能是栈的输出序列的是( )。 A. B C A B.C B A C. C A B D. A B C 3. 算法的时间复杂度取决于( ) 。 A .问题的规模 B .待处理数据的初态 C .计算机的配置 D .A 和B 4. 数组的逻辑结构不同于下列( )的逻辑结构。 A. 树 B. 栈 C. 队列 D. 线性表 5. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数为( )。 A .8 B .63.5 C .63 D .7 6. 用邻接表表示图进行深度优先遍历时,通常借助( )来实现算法。 A .队列 B. 栈 C. 树 D .图 7. 数据的最小单位是( )。 A.数据元素 B.数据项 C.数据类型 D. 数据变量

8. 设无向图G中有n个顶点,则该无向图的最小生成树上有() 条边。 A. 2n B. 2n-1 C. n-1 D. n 9. 为解决计算机主机与打印机间速度不匹配问题,通常设一个打印数据缓冲区。主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是()。 A.栈 B.队列 C.线性表 D.有序表 10. 程序段s=i=0;do {i=i+1; s=s+i;}while(i<=n);的时间复杂 度为()。 n) C.O(n2) D.O(n3/2) A. O(n) B. O(nlog 2 11.设指针变量p指向单链表中结点A,若删除单链表中结点A,则需要修改指针的操作序列为()。 A. q=p->next;p->next=q->next;free(q); B. q=p->next;p->data=q->data;free(q); C. q=p->next;p->data=q->data;p->next=q->next;free(q); D. q=p->next;q->data=p->data;p->next=q->next;free(q); 12. 顺序表中第一个元素的存储地址是100,每个元素的长度为2,则 第15个元素的地址是()。 A.110 B.108 C.100 D.128 13. 一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足()。 A.所有的结点均无左孩子 B.所有的结点均无右孩子 C.只有一个叶子结点 D.是任意一棵二叉树 14. 具有n个顶点的有向图最多有()条边。 A.n B.n2 C.n(n+1) D.n(n-1) 15. 设用邻接矩阵A表示有向图G的存储结构,则有向图G中顶点i 的入度为()。 A.第i行非0元素的个数之和 B. 第i列非0元素的个数之和 C.第i行0元素的个数之和 D. 第i列0元素的个数之和

数据结构

1、单选题(共 20 道试题,共 100 分。)得分:100 1. 把一棵树转换为二叉树后,这棵二叉树的形态是()。 A. 唯一的 2. 排序方法中,从未排序序列中依次取出元素与已排序序列(初始时为空)中的元素进行 比较,将其放入已排序序列的正确位置上的方法,称为()。 A. 希尔排序 C. 插入排序 3. 对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是()。 D. n的平方 4. 设哈希表长m=14,哈希函数H(key)=key%11。表中已有4个结点:addr (15)=4;addr (38)=5;addr (61)=6;addr (84)=7,如用二次探测再散列处理冲突,关键字为49的结点的地址 是()。 D. 9 5. 树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。这里,我们把由树转化得到的二叉树叫做这棵数对应的二叉树。结论()是正确的。 A. 树的先根遍历序列与其对应的二叉树的先序遍历序列相同 6. 排序方法中,从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的 一端的方法,称为()。 A. 希尔排序 7. 用某种排序方法对线性表(25,84,21,47,15,27,68,35,20)进行排序时,元素序列的变化情况如下:⑴25,84,21,47,15,27,68,35,20;⑵20,15,21,25,47,27,68,35,84;⑶15,20,21,25,35,27,47,68,84;⑷15,20,21,25,27,35, 47,68,84。则所采用的排序方法是()。 D. 快速排序 8. 对于一个有向图,若一个顶点的入度为k1,、出度为k2,则对应逆邻接表中该顶点单链表中的结点数为()。 A. k1 9. 用DFS遍历一个无环有向图,并在DFS算法退栈返回时打印出相应的顶点,则输 出的顶点序列是()。 A. 逆拓朴有序的

2019广东专插本韩山师范学院《数据结构》考试大纲

《数据结构》考试大纲 I 考试的性质与目的 本科插班生考试是由专科毕业生参加的选拔性考试。《数据结构》是计算机科学与技术专业(本科)的一门专业基础课程,考试主要检查考生对常用基本数据结构(顺序表、链表、栈、队列、树、二叉树、图等)的逻辑结构、存储结构和相应算法的掌握程度,以保证后续课程的学习。 II 考试的内容 一、考试基本要求 1、基本理论知识 (l)、数据结构的基本概念和基本术语,算法的描述方法和算法分析的基本概念。 (2)、线性表的基本概念、线性表的基本操作以及这些操作分别在顺序存储和链式存储结构下的实现及复杂度分析。 (3)、栈和队列的定义、存储结构、实现和典型应用。 (4)、串的定义及其基本操作。 (5)、数组的定义、运算和顺序存储。 (6)、树的定义、基本术语和存储结构,二叉树的定义和性质、二叉树的存储结构及其各种操作,哈夫曼树的概念和应用。 (7)、图的定义和术语、图的存储结构及其各种操作。 (8)、各种查找方法的算法、适用范围及时间复杂度的分析。 (9)、多种内排算法的基本思想和算法的时间复杂度分析,不同排序方法的比较。 2、基本技能 (1)、能阅读用类C语言编写的算法。 (2)、能分析算法所完成的功能、运行结果和时间复杂度。 (3)、能根据要求用类C语言编写算法。 二、考核知识点及考核要求 第一章绪论 一、考核知识点 1.数据、数据元素、数据项、数据对象、数据结构、逻辑结构、物理结构、元素、结点等基本概念。抽象数据类型的定义、表示和实现方法。 2.算法、算法的特性、如何用类C语言来描述算法。 3.算法设计的基本要求以及计算语句频度和估算算法时间复杂度的方法。 二、考核要求 1.识记:有关数据结构的基本概念,四种基本数据结构的特点。 2.理解:四种基本数据结构的基本运算,算法复杂度度量的基本概念。 3.应用:用类C语言描述算法

数据结构

数据结构 一、单项选择题 1.数据的最小单位是_A___。 A.数据元素 B.记录 C.数据对象 D.数据项 2. 对于一个具有n个结点和e条边的无向图,若采用邻接表表 示,所有边链表中边结点的总数为__C__。 A. e/2 B.e C.2e D.n+e 3. 数组a[1..6,1..5] (无0行0列)以列序为主序顺序存储, a[1][1]的地址为1000,每个元素占2个存储单元,则a[3][4]的地址是___A_。 A.1026 B.1040 C.1042 D.1046 4.某线性表常发生的操作为删除第一个数据元素和在最后一个 元素后添加新元素,采用__D__的存储结构,能使其存储效率和时间效率最高。 A.单链表B.仅用头指针的循环链表C.双向循环链表D.仅用尾指针的循环链表 5. 在一个单链表中,已知q所指向的结点是p指向的结点的直接 前驱结点,若在q所指向的结点和p指向的结点间插入s所指向的结点,则执行 C ___ 。 A. s->next=p->next; p->next=s; B. p->next=s->next; s->next=p; C. q->next=s; s->next=p; D. p->next=s; s->next=q; 6. 若循环队列使用C数组A[m]存放其数据元素,已知头指针 front指向队首元素,尾指针rear指向尾元素后的空单元,则当前队列中的元素个数为___A_。 A.(rear-front+m)%m B. rear-front+1 C. rear-front D. rear-front-1 7. 栈和队列的共同点是___C_。 A.先进先出 B. 后进先出 C.只允许在端点处插入和删除元素 D. 运算受限的线性表

相关文档