数据结构和算法,选择题

2024-05-19 14:35

1. 数据结构和算法,选择题

答案是错的,应该是选C
每个度数为2的结点,空指针域为0
每个度数为1的结点,空指针域为1
每个度数为0的结点,空指针域为2
所以是N0*2+N1

数据结构和算法,选择题

2. 算法与数据结构试题 急用!!!

这是我写的顺序查找和二分查找代码
#include
#define elemtype int

int   sqsearch(elemtype a[],int n,elemtype x);  //顺序查找
int  sqsearch2(elemtype a[],int n,elemtype x);  //顺序查找,打印查找过程
int  binsearch(elemtype a[],int n,elemtype x);  //折半查找
int binsearch2(elemtype a[],int n,elemtype x);  //折半查找,打印查找过程

void printarray(elemtype a[],int n);            //打印数组数据

int main()
{
	int i,x;
	const int n=9;
	elemtype a1[10]={0,34,23,12,56,90,78,89,45,67};
	elemtype a2[10]={0,12,23,34,45,56,67,78,89,90};
	
    //顺序查找
	cout<<"顺序查找:"<<endl;
	cout<<"a1[]=";
	printarray(a1,n);
	cout<<"输入要查找的数据:";
	cin>>x;
	if((i=sqsearch(a1,n,x))>0)   //找到
		cout<<"找到x==a1["<<i<<"]"<<endl;
	else                         //未找到
		cout<<"找不到"<<x<<endl;
	cout<<endl<<"查找过程:"<<endl;
	sqsearch2(a1,n,x);           //查找过程
	cout<<"完成顺序查找!"<<endl;
	//二分法查找
	cout<<"二分法查找:"<<endl;
	cout<<"a2[]=";
	printarray(a2,n);
	cout<<"输入要查找的数据:";
	cin>>x;
	if((i=binsearch(a2,n,x))>0)  //找到
		cout<<"找到x==a1["<<i<<"]"<<endl;
	else                         //未找到
		cout<<"找不到"<<x<<endl;
	cout<<endl<<"查找过程:"<<endl;
	binsearch2(a2,n,x);
    cout<<"完成顺序查找!"<<endl;
	return 0;
}

//在数组a[1.2...n]中顺序查找x
//找到时返回元素下标,否则返回0
int  sqsearch(elemtype a[],int n,elemtype x)      //a[]是数组,n是元素个数,x是要查找的数
{
	int i;
	if(a[0]==x)
		return 1;
	else
	{
		a[0]=x;
		for(i=n;!(a[i]==x);--i);                       //若找到则i大于0
		return i;
	}
}

//在数组a[1.2...n]中顺序查找x,打印每次比较结果
//找到时返回元素下标,否则返回0
int  sqsearch2(elemtype a[],int n,elemtype x)     //a[]是数组,n是元素个数,x是要查找的数
{
	int i;
	a[0]=x;
	for(i=n;!(a[i]==x);--i)
		if(a[i]>x)
			cout"<<x<<endl;
		else
			cout<<a[i]<<"<"<<x<<endl;
		return i;
}

//在数组a[1.2...n]中二分法查找x
//找到时返回元素下标,否则返回0
//前提:a[1.2...n]是非递减有序的
int  binsearch(elemtype a[],int n,elemtype x)      //二分查找
{
	int mid,low=1,high=n;
	while(low<=high)
	{
		mid=(low+high)/2;
		if(x==a[mid])
			return mid;
		else if(x<a[mid])
			high=mid-1;
		else
			low=mid+1;
	}
	return 0;
}

//在数组a[1.2...n]中二分法查找x,每次打印比较结果
//找到时返回元素下标,否则返回0
//前提:a[1.2...n]是非递减有序的
int binsearch2(elemtype a[],int n,elemtype x)      //查找过程
{
	int mid,low=1,high=n;
	while(low<=high)
	{
		mid=(low+high)/2;
		if(x==a[mid])
		{
			cout<<a[mid]<<"="<<x<<endl;
			return mid;
		}
		else if(x<a[mid])
		{
			cout"<<x<<endl;
			high=mid-1;
		}
		else
		{
			cout<<a[mid]<<"<"<<x<<endl;
			low=mid+1;
		}
	}
	return 0;
}

//打印顺组数据a[1....n]
void printarray(int a[],int n)
{
	int i;
	cout<<"{";
	for(i=0;i<=n;i++)
	{
		cout<<a[i];
		while(i<n)
		{
			cout<<",";
			break;
		}
	}   
	cout<<"}"<<endl;
}

3. 数据结构与算法选择题!

第一题,DFS(深度优先遍历)是一个递归算法,在遍历的过程中,先访问的点被压入栈底(栈是先进后出),再说:拓扑有序是指如果点U到点V有一条弧,则在拓扑序列中U一定在V之前。深度优先算法搜索路径恰恰是一条弧,栈的输出是从最后一个被访问点开始输出,最后一个输出的点是第一个被访问的点。所以是逆的拓扑有序序列
第二题:无向图路径长度是指两个顶点之间弧的条数,如果两顶点路径长度有2条弧,则有3个顶点例如A——B——C;
第三题:A:极小连通图是一棵生成树,只有N-1条边,但是连通分量可能有N条边,例如极小连通图A—— B——C,连通分量“A”——B——C——“A”(这里的最后一个“A”跟第一个“A”一致):;
B:你查下极大强连通子图概念就明白了;
C:你看看第二题的例子就明白了,AC之间没有弧,但他们是一个拓扑序列;
D:例如:环形图就不满足,比如长方形,四个顶点,两种遍历都能访问到每个顶点,但不是完全图

数据结构与算法选择题!

4. 数据结构与算法题


5. 数据结构与算法选择题

1.A
存取任一指定序号,用顺序表最方便,在最后进行插入和删除运算,顺序表也可以方便的实现。
2.C
第一个是5,第二个是4,都可以,表示5、4是最后进栈的,之后再要出栈1,不可能
3.D
4.C
5.A
生成树
6.D
二分查找的前提是该查找必须是顺序存储的有序表
7.C
8.不清楚
9.B
abc,cba正好倒过来。
10.B

数据结构与算法选择题

6. 算法与数据结构题目

你的题目可能有些问题,是不是:
设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分按行序存放
一维数组B[0~n(n-1)/2-1]中,对下三角部分中任一元素aij(i>j)【注意不是aij(i>=j),否则题目有矛盾】,在一维数组B中下标k的值是
__k=(i-1)*i/2+j,其中i,j从0~n-1,排列顺序为a10,a20,a21,a30,a31,a32,a40….
__

7. 数据结构与算法题

数据结构复习
重点是了解数据结构的逻辑结构、存储结构、数据的运算三方面的概念及相互关系,难点是算法复杂度的分析方法。
需要达到层次的基本概念和术语有:数据、数据元素、数据项、数据结构。特别是数据结构的逻辑结构、存储结构及数据运算的含义及其相互关系。数据结构的两大类逻辑结构和四种常用的存储表示方法。
需要达到层次的内容有算法、算法的时间复杂度和空间复杂度、最坏的和平均时间复杂度等概念,算法描述和算法分析的方法、对一般的算法要能分析出时间复杂度。
对于基本概念,仔细看书就能够理解,这里简单提一下:
数据就是指能够被计算机识别、存储和加工处理的信息的载体。
数据元素是数据的基本单位,有时一个数据元素可以由若干个数据项组成。数据项是具有独立含义的最小标识单位。如整数这个集合中,10这个数就可称是一个数据元素.又比如在一个数据库(关系式数据库)中,一个记录可称为一个数据元素,而这个元素中的某一字段就是一个数据项。

数据结构的定义虽然没有标准,但是它包括以下三方面内容:逻辑结构、存储结构、和对数据的操作。这一段比较重要,我用自己的语言来说明一下,大家看看是不是这样。

比如一个表(数据库),我们就称它为一个数据结构,它由很多记录(数据元素)组成,每个元素又包括很多字段(数据项)组成。那么这张表的逻辑结构是怎么样的呢? 我们分析数据结构都是从结点(其实也就是元素、记录、顶点,虽然在各种情况下所用名字不同,但说的是同一个东东)之间的关系来分析的,对于这个表中的任一个记录(结点),它只有一个直接前趋,只有一个直接后继(前趋后继就是前相邻后相邻的意思),整个表只有一个开始结点和一个终端结点,那我们知道了这些关系就能明白这个表的逻辑结构了。



而存储结构则是指用计算机语言如何表示结点之间的这种关系。如上面的表,在计算机语言中描述为连续存放在一片内存单元中,还是随机的存放在内存中再用指针把它们链接在一起,这两种表示法就成为两种不同的存储结构。(注意,在本课程里,我们只在高级语言的层次上讨论存储结构。)

第三个概念就是对数据的运算,比如一张表格,我们需要进行查找,增加,修改,删除记录等工作,而怎么样才能进行这样的操作呢? 这也就是数据的运算,它不仅仅是加减乘除这些算术运算了,在数据结构中,这些运算常常涉及算法问题

数据结构与算法题

8. 数据结构与算法的题目

(1) f
(2) 41
(3) bc
(4) bd
(5) 相同