2023年江苏省数据概述入门

发布 2022-04-26 07:40:28 阅读 9638

1、设一棵树t中边的集合为,要求用孩子兄弟表示法(二叉链表)表示出该树的存储结构并将该树转化成对应的二叉树。

2、若第n件物品能放入背包,则问题变为能否再从n-1件物品中选出若干件放入背包(这时背包可放入物品的重量变为s-w[n])。若第n件物品不能放入背包,则考虑从n-1件物品选若干件放入背包(这时背包可放入物品仍为s)。若最终s=0,则有一解;否则,若s<0或虽然s>0但物品数n<1,则无解。

1)s-w[n],n-1 //knap(s-w[n],n-1)=true

2)s,n-1knap←knap(s,n-1)

3、请设计一个算法,要求该算法把二叉树的叶子结点按从左到右的顺序连成一个单链表,表头指针为head。 二叉树按二叉链表方式存储,链接时用叶子结点的右指针域来存放单链表指针。分析你的算法的时、空复杂度。

4、有一种简单的排序算法,叫做计数排序(count sorting)。这种排序算法对一个待排序的表(用数组表示)进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待排序的关键码互不相同,计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键码比该记录的关键码小,假设针对某一个记录,统计出的计数值为c,那么,这个记录在新的有序表中的合适的存放位置即为c。

(1) (3分)给出适用于计数排序的数据表定义;

(2) (7分)使用pascal或c语言编写实现计数排序的算法;

(3) (4分)对于有n个记录的表,关键码比较次数是多少?

(4) (3分)与简单选择排序相比较,这种方法是否更好?为什么?

5、 二叉树的层次遍历序列的第一个结点是二叉树的根。实际上,层次遍历序列中的每个结点都是“局部根”。确定根后,到二叉树的中序序列中,查到该结点,该结点将二叉树分为“左根右”三部分。

若左、右子树均有,则层次序列根结点的后面应是左右子树的根;若中序序列中只有左子树或只有右子树,则在层次序列的根结点后也只有左子树的根或右子树的根。这样,定义一个全局变量指针r,指向层次序列待处理元素。算法中先处理根结点,将根结点和左右子女的信息入队列。

然后,在队列不空的条件下,循环处理二叉树的结点。队列中元素的数据结构定义如下:

typedef struct

int lvl层次序列指针,总是指向当前“根结点”在层次序列中的位置。

int l,h中序序列的下上界。

int f层次序列中当前“根结点”的双亲结点的指针。

int lr1—双亲的左子树 2—双亲的右子树。

qnode;

bitree creat(datatype in,level,int n)

/由二叉树的层次序列level[n]和中序序列in[n]生成二叉树。 n是二叉树的结点数。

if (n<1)

qnode s,qq是元素为qnode类型的队列,容量足够大。

init(q); int r=0; /r是层次序列指针,指向当前待处理的结点。

bitree p=(bitree)malloc(sizeof(binode生成根结点。

p->data=level[0]; p->lchild=null; p->rchild=null; /填写该结点数据。

for (i=0; i if (in[i]==level[0]) break;

if (i==0) /根结点无左子树,遍历序列的1—n-1是右子树。

else if (i==n-1) /根结点无右子树,遍历序列的1—n-1是左子树。

p->rchild=null;

enqueue(q,s);

else //根结点有左子树和右子树。

左子树有关信息入队列。

右子树有关信息入队列。

while (!empty(q)) 当队列不空,进行循环,构造二叉树的左右子树。

//结束while (!empty(q))

return(p);

//算法结束。

6、我们用l代表最长平台的长度,用k指示最长平台在数组b中的起始位置(下标)。用j记住局部平台的起始位置,用i指示扫描b数组的下标,i从0开始,依次和后续元素比较,若局部平台长度(i-j)大于l时,则修改最长平台的长度k(l=i-j)和其在b中的起始位置(k=j),直到b数组结束,l即为所求。

void platform (int b[ ]int n)

//求具有n个元素的整型数组b中最长平台的长度。

l=1;k=0;j=0;i=0;

while(i //局部最长平台。

i++;j=i新平台起点。

printf(“最长平台长度%d,在b数组中起始下标为%d”,l,k);

// platform

7、 将顶点放在两个集合v1和v2。对每个顶点,检查其和邻接点是否在同一个集合中,如是,则为非二部图。为此,用整数1和2表示两个集合。再用一队列结构存放图中访问的顶点。

int bpgraph (adjmatrix g)

判断以邻接矩阵表示的图g是否是二部图。

//初始化,各顶点未确定属于那个集合。

q[1]=1; r=1; s[1]=1;//顶点1放入集合s1

while(f /邻接点入队列。

else if (s[j]==s[v]) return(0);}非二部图。

}//if (!visited[v])

//while

return(1); 是二部图。

算法讨论] 题目给的是连通无向图,若非连通,则算法要修改。

2023年江苏省C语言入门

1 设一棵树t中边的集合为,要求用孩子兄弟表示法 二叉链表 表示出该树的存储结构并将该树转化成对应的二叉树。2 根据二叉排序树中序遍历所得结点值为增序的性质,在遍历中将当前遍历结点与其前驱结点值比较,即可得出结论,为此设全局指针变量pre 初值为null 和全局变量flag,初值为true。若非二叉...

2023年江苏省数据要领大纲

1 给出折半查找的递归算法,并给出算法时间复杂度性分析。2 已知有向图g v,e 其中v e 写出g的拓扑排序的结果。g拓扑排序的结果是 v1 v2 v4 v3 v5 v6 v7 3 我们用l代表最长平台的长度,用k指示最长平台在数组b中的起始位置 下标 用j 记住局部平台的起始位置,用i指示扫描b...

江苏省2019高考模式

2011年江苏省普通高考的模式与往年相同,仍为 3 学业水平测试 综合素质评价 3 指语文 数学 外语三门。学业水平测试科目包括政治 历史 地理 物理 化学 生物 技术 含通用技术和信息技术,下同 七门。文科类或理科类考生设选修测试科目两门,必修测试科目五门。文科类考生选修测试科目除须选择历史科目外...