2024年贵州省数据要领加强

发布 2023-12-23 17:00:09 阅读 5258

1、设指针变量p指向双向链表中结点a,指针变量q指向被插入结点b,要求给出在结点a的后面插入结点b的操作序列(设双向链表中结点的两个指针域分别为llink和rlink)。

2、约瑟夫环问题(josephus问题)是指编号为、…n的n(n>0)个人按顺时针方向围坐成一圈,现从第s个人开始按顺时针方向报数,数到第m个人出列,然后从出列的下一个人重新开始报数,数到第m的人又出列,…,如此重复直到所有的人全部出列为止。现要求采用循环链表结构设计一个算法,模拟此过程。

#include<>

typedef int datatype;

typedef struct node

datatype data;

struct node *next;

listnode;

typedef listnode *linklist;

void jose(linklist head,int s,int m)

linklist k1,pre,p;

int count=1;

pre=null;

k1=headk1为报数的起点*/

while (count!=s) /找初始报数起点*/

while(k1->next!=k1) /当循环链表中的结点个数大于1时*/

pre->next=p->next; /输出该结点,并删除该结点*/

printf("%4d",p->data);

free(p);

k1=pre->next新的报数起点*/

printf("%4d",k1->data); 输出最后一个结点*/

free(k1);

main()

linklist head,p,r;

int n,s,m,i;

printf("n=")

scanf("%d",&n);

printf("s=")

scanf("%d",&s);

printf("m=",m);

scanf("%d",&m);

if (n<1) printf("n<0");

elser->next=head; /生成循环链表*/

jose(head,s,m); 调用函数*/

3、设一棵二叉树的结点结构为 (llink,info,rlink),root为指向该二叉树根结点的指针,p和q分别为指向该二叉树中任意两个结点的指针,试编写一算法ancestor(root,p,q,r),该算法找到p和q的最近共同祖先结点r。

4、设t是一棵满二叉树,编写一个将t的先序遍历序列转换为后序遍历序列的递归算法。

5、矩阵中元素按行和按列都已排序,要求查找时间复杂度为o(m+n),因此不能采用常规的二层循环的查找。可以先从右上角(i=a,j=d)元素与x比较,只有三种情况:一是a[i,j]>x, 这情况下向j 小的方向继续查找;二是a[i,j]void search(datatype a[ ]int a,b,c,d, datatype x)

//n*m矩阵a,行下标从a到b,列下标从c到d,本算法查找x是否在矩阵a中。

else if (a[i][j]>x) j--;else i++;

if(flag) printf(“a[%d][%d]=%d”,i,j,x假定x为整型。

else printf(“矩阵a中无%d 元素”,x);

}算法search结束。

算法讨论]算法中查找x的路线从右上角开始,向下(当x>a[i,j])或向左(当x6、设有一组初始记录关键字序列(k1,k2,…,kn),要求设计一个算法能够在o(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于ki,右半部分的每个关键字均大于等于ki。

void quickpass(int r,int s, int t)

int i=s, j=t, x=r[s];

while(iwhile (ix) j=j-1; if (i while (i }

r[i]=x;

#define maxsize 栈空间容量。

void inouts(int s[maxsize])

//s是元素为整数的栈,本算法进行入栈和退栈操作。

else s[++top]=x; /x入栈。

else //读入的整数等于-1时退栈。

else printf(“出栈元素是%d”,s[top

//算法结。

2024年山东省数据要领加强

if p h p data a i重复数据不再输入。while k1 next k1 当循环链表中的结点个数大于1时 pre next p next 输出该结点,并删除该结点 printf 4d p data free p k1 pre next新的报数起点 printf 4d k1 data 输出...

2024年山东省数据要领加强

if p h p data a i重复数据不再输入。while k1 next k1 当循环链表中的结点个数大于1时 pre next p next 输出该结点,并删除该结点 printf 4d p data free p k1 pre next新的报数起点 printf 4d k1 data 输出...

2024年贵州省数据概述入门

1 已知有向图g v,e 其中v e 写出g的拓扑排序的结果。g拓扑排序的结果是 v1 v2 v4 v3 v5 v6 v7 void linklist reverse linklist l 链表的就地逆置 为简化算法,假设表长大于2 p l next q p next s q next p next...