编程题ll

编程题

6-1 删除顺序表中的偶数

本题要求实现一个函数,可删除顺序表中的偶数元素。

函数接口定义:

void Del_even(SqList *L);

答案:

void Del_even(SqList *L)
{//SqListDelete ( SqList *L, int pos, DataType *item ) DataType k; for(int i=0;i<=L->length;i++){if(L->items[i]%2==0){SqListDelete (L,i+1,&k);i=i-1;}}
}

舞伴问题

假设男士和女士的记录存放在一个数组中,设计算法实现舞伴配对,要求输出配对的舞伴,并输出没有配对的队头元素的姓名。

函数接口定义:

void DancePartner(DataType dancer[], int num) ;

答案:

void DancePartner(DataType dancer[], int num)
{int i,j,k;for(i = 0;i < num/2;i++) // 次数{for(j = 0;j < num;){if(dancer[j].sex=='F')break;else j++; // 找女士}for(k = 0;k < num;){if(dancer[k].sex=='M')break;else k++;   // 找男士}if(dancer[j].sex=='F'&&dancer[k].sex=='M')  // 如果找到一男一女{printf("%s %s\n",dancer[j].name,dancer[k].name);dancer[j].sex='A';  // 更换性别做标记dancer[k].sex='A';}}printf("\n");for(j = 0;j < num;j++){if(dancer[j].sex!='A'){printf("%s\n",dancer[j].name);  //输出没有配对的头元素break;}}       
}

判断回文

回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个程序判定给定的字符向量是否为回文,用栈实现。(提示:将一半字符入栈)

输入格式:

输入任意字符串。

输出格式:

若字符串是回文,输出:xxxx是回文。
若字符串不是回文,输出:xxxx不是回文。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Maxsize 1024
typedef struct{int data[Maxsize];int top;
}Sq;
//初始化栈
void Init(Sq* stack){stack->top=-1;
}
//判断是否为空
int Empty(Sq* stack){if(stack->top==-1){return 1;}else{return 0;}
}
//入栈
void Push(Sq* stack,char val){if(stack->top==Maxsize-1){return;}stack->top++;stack->data[stack->top]=val;
}
//出栈
char Pop(Sq* stack){if(Empty(stack)==0){return stack->data[stack->top--];}}
int main(){int i,j=0,len=0,flag=0;char s[81],temp;Sq stack;Init(&stack);gets(s);len= strlen(s);//将字符串s入栈for(i=0;i<len;i++){Push(&stack,s[i]);}while(s[j]!='\0'){//使用temp来接收出栈的内容temp= Pop(&stack);//如果s[j++]正序输出  和  出栈内容相同,则为回文if(s[j]==temp){flag=1;}else{flag=0;break;}j++;}if(flag==1){printf("%s是回文。",s);}else{printf("%s不是回文。",s);}return 0;
}

1.二叉树度为2的结点求和

实现一个函数,返回二叉树bt中度为2的结点的数值之和。

函数接口定义:

int sumDCNodes(struct BinTree *bt);

答案:

int sumDCNodes(struct BinTree *bt)
{if(bt){if(bt->left && bt->right){return bt->data + sumDCNodes(bt->left) + sumDCNodes(bt->right);}return sumDCNodes(bt->left) + sumDCNodes(bt->right);}return 0;
}

2.计算二叉树的叶子数

本题是计算二叉树中叶子结点的个数。

函数接口定义:

在这里描述函数接口。例如:
int num (Bptr p);

答案:

int num (Bptr p){if(p==NULL){return 0;}if(p->Lson==NULL&&p->Rson==NULL)return 1;return num(p->Lson)+num(p->Rson);
}

3.二叉树的递归遍历

要求使用递归算法实现二叉树的先序遍历、中序遍历和后序遍历。

函数接口定义:

void PreorderTraversal(BinTree BT)   /* 二叉树的先序遍历 */ 
void InorderTraversal(BinTree BT)   /* 二叉树的中序遍历 */ 
void PostorderTraversal(BinTree BT)    /* 二叉树的后序遍历 */

答案:

void PreorderTraversal(BinTree BT)   /* 二叉树的先序遍历 */ 
{if(BT){printf("%c",BT->Data);PreorderTraversal(BT->Left);PreorderTraversal(BT->Right);}}
void InorderTraversal(BinTree BT)   /* 二叉树的中序遍历 */ 
{if(BT){InorderTraversal(BT->Left);printf("%c",BT->Data);InorderTraversal(BT->Right);}
}
void PostorderTraversal(BinTree BT)    /* 二叉树的后序遍历 */
{if(BT){PostorderTraversal(BT->Left);PostorderTraversal(BT->Right);printf("%c",BT->Data);}}

4.求二叉树高度

本题要求给定二叉树的高度。

函数接口定义:

int GetHeight( BinTree BT );

答案:

/*递归法求二叉树的高度*/
int GetHeight(BinTree BT)
{int h1,h2;if(BT==NULL)return 0;else{h1=GetHeight(BT->Left);h2=GetHeight(BT->Right);if(h1>h2)return h1+1;elsereturn h2+1;}
}

1. 叶结点求和

对给定的有N个节点(N>=0)的二叉树,求叶节点元素之和。

输入格式:

第一行是一个非负整数N,表示有N个节点

第二行是一个整数k,是树根的元素值

接下来有N-1行,每行是一个新节点,格式为 r d e 三个整数,

r表示该节点的父节点元素值(保证父节点存在);d是方向,0表示该节点为父节点的左儿子,1表示右儿子;e是该节点的元素值。

#include<stdio.h>
typedef struct Lnode
{int r;int d;int e;
}Tree,*Treenode;
int main()
{int flag=1; // 标记是否能在r中找到int i,t,j;int n,E,sum=0;scanf("%d",&n);scanf("%d",&E);if(n==0){printf("%d",0);return 0;} // 空树if(n==1){printf("%d",E);return 0;} // 仅含有根节点t=n-1;Tree T[t];for(i=0;i<t;i++)scanf("%d %d %d",&T[i].r,&T[i].d,&T[i].e);for(i=0;i<t;i++){flag=1;for(j=0;j<t;j++)if(T[i].e==T[j].r)flag=0;if(flag)sum+=T[i].e;}printf("%d",sum);
}

1.最小生成树(普里姆算法)

试实现普里姆最小生成树算法。

函数接口定义:

void Prim(AMGraph G, char u);

答案:

void Prim( AMGraph G, char v ){ int distance[G.vexnum];int parent[G.vexnum];//记录v的下标int index=0;int i,min=MaxInt,imin,count=0;// 1.初始化这棵树,即以v为起始点,同时初始化数组distance[]//     注:distance数组表示该树的任意一点到该点的最小距离//寻找v的下标for (i = 0; i < G.vexnum; i++){if (G.vexs[i]==v){index=i;}}for (i = 0; i < G.vexnum; i++){if (i==index){distance[i]=0;parent[i]=index;}else{distance[i]=G.arcs[index][i];parent[i]=index;}       }while (1){if (count==G.vexnum-1){break;}// 2.从小树现有的结点出发,寻找边权值最小的点:for ( i = 0; i < G.vexnum; i++){if (min>distance[i]&&distance[i]!=0){//记录最小值及其下标min=distance[i];imin=i;}}//更新已到达过得节点数count++;// 3.找到后输出该边if (count<G.vexnum-1){printf("%c->%c\n",G.vexs[parent[imin]],G.vexs[imin]);}else{printf("%c->%c",G.vexs[parent[imin]],G.vexs[imin]);}//初始化min以便下次寻找min=MaxInt;// 4.将该点的distance数组中的值赋值为0,标记已经遍历过distance[imin]=0;// 5.循环遍历结点,更新distance[]数组for ( i = 0; i < G.vexnum; i++){if (distance[i]!=0&&G.arcs[i][imin]<MaxInt){if (distance[i]>G.arcs[i][imin]){distance[i]=G.arcs[i][imin];parent[i]=imin;}                   }}            }}

2.统计无向图中各顶点的度

本题要求实现一个函数,统计无向图中各顶点的度。

函数接口定义:

void degree(MGraph Graph,int *num);

答案:

void degree(MGraph Graph,int *num)
{int i,j;for(i = 0;i < Graph->Nv; i++){for(j = 0;j < Graph->Nv; j++){if(Graph->G[i][j]!=INFINITY)num[i]++;}}
}

3.基于邻接矩阵表示的广度优先遍历

实现基于邻接矩阵表示的广度优先遍历。

函数接口定义:

void BFS(Graph G, int v);

答案:

void BFS(Graph G, int v) {int queue[MVNum];//定义int类型队列int front = 0, rear = 0;//首尾初始化int flag;//表示队首的顶点坐标printf("%c ", G.vexs[v]);//打印访问visited[v] = 1;rear = (rear + 1) % MVNum;//%MVNum防止队列溢出queue[rear] = v;//将此节点放入队尾while (front != rear) {//如果队列不为空front = (front + 1) % MVNum;//%MVNum防止队列溢出flag = queue[front];//flag接住队首元素的位置for (int i = 0; i < G.vexnum; i++) {if (G.arcs[flag][i] != 0 && !visited[i]) //两点直接存在边,节点还没遍历{printf("%c ", G.vexs[i]);//访问打印visited[i] = 1;//状态变更为遍历过rear = (rear + 1) % MVNum;//队尾后移queue[rear] = i;//将其加入队列}}}
}

4.实现基于邻接矩阵表示的深度优先遍历

实现基于邻接矩阵表示的深度优先遍历。

函数接口定义:

void DFS(Graph G, int v);

答案:

void DFS(Graph G, int v)
{int i;visited[v]=1;printf("%c ",G.vexs[v]);for(i=0;i<G.vexnum;i++)if(!visited[i]&&G.arcs[v][i])DFS(G,i);
}

5.最小生成树(克鲁斯卡尔算法)

试实现克鲁斯卡尔最小生成树算法。

函数接口定义:

void Kruskal(AMGraph G);

答案:

/*void Kruskal(AMGraph G){printf("0->5\n2->3\n1->6\n1->2\n3->4\n4->5\n");   
}*/void Kruskal(AMGraph G){/*由于kruskal算法的特点 我们需要放置树成环,所以需要辅助数组*/int assists[G.vexnum];/*对辅助数组赋值不同的值*/for(int i=0;i<G.vexnum;++i){assists[i]=i;}//初始化边结构体int temp=0;for(int i = 0;i<G.vexnum;++i){for(int j=0;j<G.vexnum;++j){if(G.arcs[i][j]!=MaxInt&&j>i){Edge[temp].Head = G.vexs[i];Edge[temp].Tail = G.vexs[j];Edge[temp].lowcost = G.arcs[i][j];temp++;}}}//对结构体进行排序 对每个边进行排序 所以i的条件必须是与边的关系for(int i=0;i<G.arcnum-1;++i){for(int j=i+1;j<G.arcnum;++j){if(Edge[j].lowcost<Edge[i].lowcost){Evode temp2 = Edge[i];Edge[i] =Edge[j];Edge[j] = temp2;}}}//printf("0->5\n2->3\n1->6\n1->2\n3->4\n4->5");for(int i=0;i<G.arcnum;++i){/*获取头顶点与尾顶点在图中的位置*/int v1 = LocateVex(G,Edge[i].Head);int v2 = LocateVex(G,Edge[i].Tail);/*获取对应位置在辅助数组中的元素*/int vs1 = assists[v1];int vs2 = assists[v2];/*判断是否成环  如果当前插入的边对应的两个顶点不同那么就不会成环*//*如果相等了那么这两个顶点肯定是把之前的树构成了一个环*/if(vs1!=vs2){/*满足的打印出来*/printf("%c->%c\n",Edge[i].Head,Edge[i].Tail);/*如果满足, 把头顶点在辅助数组中对应的值赋值给尾结点 代表连接成功*/for(int j=0;j<G.vexnum;++j){if(assists[j]==vs2){assists[j]=vs1;}}}}
}

1.数据结构考题 - 顺序查找

建立一个顺序表,用顺序查找的方法对其实施查找。

顺序表的类型描述:

#define MAXSIZE 50
typedef int ElemType;
typedef  struct
{ ElemType  *R; int  length;
} SSTable;    

函数接口定义:

下面给出了 顺序查找 函数的大部分内容,但缺少了一部分(以下划线____标识出来的部分)。

请先将以下代码中画横线的部分补充完整,然后将完整的函数Search_Seq提交系统,完成题目要求的功能。

int  Search_Seq (SSTable  T,ElemType  k)
{   int i;T.R[0]= ____ ;for ( i=____ ; T.R[ ____ ]!= k ; ____ );return ____ ;
}

答案:

int  Search_Seq(SSTable  T, ElemType  k)
{int i;T.R[0] = k;for (i = T.length; T.R[i] != k; --i);return i;
}

2.数据结构考题 - 折半查找

建立一个递增的有序表(用顺序表作存储结构),用折半查找的方法对其实施查找。

顺序表的类型描述:

#define MAXSIZE 50
typedef int ElemType;
typedef  struct
{ElemType  *R; int  length;
} SSTable;  

函数接口定义:

下面给出了 折半查找 函数的大部分内容,但缺少了一部分(以下划线____标识出来的部分)。

请先将以下代码中画横线的部分补充完整,然后将完整的函数Search_Bin提交系统,完成题目要求的功能。

int  Search_Bin(SSTable T, ElemType k)
{  int low,high,mid;low=1;high=T.length;while ( ____ ){  mid=____ ;if ( ____)  return  mid;else  if (k< T.R[mid])   high=____;else   low=____;}return 0 ;
}

答案:

int  Search_Bin(SSTable T, ElemType k)
{  int low,high,mid;low=1;high=T.length;while ( low<=high ){  mid = (low+high)/2;;if ( T.R[mid] == k)  return  mid;else  if (k< T.R[mid])   high=mid-1;else   low=mid+1;}return 0 ;
}

6-1 折半插入排序

实现折半插入排序。

函数接口定义:

void BInsertSort(SqList &L);

答案:

void BInsertSort(SqList& L)//插入排序
{for (int i = 1; i < L.length + 1; i++){L.r[0].key = L.r[i].key;for (int j = i; j > 1; j--){if (L.r[j].key < L.r[j - 1].key){L.r[j].key = L.r[j - 1].key;L.r[j - 1].key = L.r[0].key;}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

课时119:awk实践_基础实践_显示语法

1.1.3 显示语法 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 简介 awk支持格式化输出相关信息。它主要依赖两种方法&#xff1a;属性方法OFS 输出格式的列分隔符&#xff0c;缺省是空格ORS 输出记录分隔符,输出时用指定符号代…

Spring的@Retryable实现方法重试

一、背景 近日&#xff0c;公司遭遇了一次因MQ消息队列故障导致的待办信息推送中断事件。小王&#xff0c;作为技术团队的一员&#xff0c;突然接到了业务部门的报障&#xff0c;称今日的待办信息未能如期推送至用户。这一消息让小王颇感意外&#xff0c;因为考虑到消息通知服…

Blender材质,纹理,UV

1.材质Material&#xff0c;用于描述物体的表面性质&#xff0c;包含以下基本属性 -基础色 -金属/非金属 -粗糙度 -透光度 -凹凸细节 添加材质步骤&#xff1a; 1&#xff09;切换到材质预览模式 2&#xff09;打开材质面板 3&#xff09;添加一个材质&#xff0c;包括材…

MATLAB基础应用精讲-【数模应用】信度分析(附MATLAB和R语言代码实现)

目录 前言 几个高频面试题目 信度和效度对比 一、信度 二、效度

macOS 常用快捷键

macOS 常用快捷键 快捷键描述通用操作Command C复制Command V粘贴Command X剪切&#xff08;配合其他快捷键&#xff09;Command A全选Command Z撤销Command Shift Z重做Command N新建窗口/文档Command O打开文件/窗口Command S保存文件Command Q退出应用程序Comma…

PostgreSQL(十二)报错:Tried to send an out-of-range integer as a 2-byte value: 51000

目录 一、报错场景二、源码分析三、实际原因&#xff08;更加复杂&#xff09;四、解决思路 一、报错场景 今天写了一个历史数据处理程序&#xff0c;在开发环境、测试环境都可以正常执行&#xff0c;但是放到生产环境上就不行&#xff0c;报了一个这样的错误&#xff1a; or…

MQTT对比HTTP

吞吐量&#xff1a;根据3G网络的测量结果&#xff0c;MQTT的吞吐量比HTTP快93倍。这意味着在相同的网络条件下&#xff0c;MQTT能够更有效地传输数据&#xff0c;从而在处理大量数据或实时数据传输时具有更高的效率。架构与模式&#xff1a;MQTT基于发布/订阅模型&#xff0c;提…

信息系统项目管理师0095:项目管理知识领域(6项目管理概论—6.4价值驱动的项目管理知识体系—6.4.4项目管理知识领域)

点击查看专栏目录 文章目录 6.4.4项目管理知识领域6.4.4项目管理知识领域 除了过程组,过程还可以按知识领域进行分类。知识领域指按所需知识内容来定义的项目管理领域,并用其所含过程、实践、输入、输出、工具和技术进行描述。 虽然知识领域相互联系,但从项目管理的角度来看…

SparkSQL数据源

目录 第1关&#xff1a;SparkSQL加载和保存 任务描述 相关知识 加载数据 直接在文件上运行SQL 保存到路径 保存模式介绍 保存到持久表 存储和排序或分区 编程要求 测试说明 第2关&#xff1a;Parquet文件介绍 任务描述 相关知识 编程方式加载Parquet文件 Parquet分区 结构合并 …

Canvas实现画板

Canvas如何实现画板功能。 <!DOCTYPE html> <html> <head><title>Canvas 画板</title><style>canvas {border: 1px solid black;}</style> </head> <body><canvas id"canvas" width"800" heig…

第41天:WEB攻防-ASP应用HTTP.SYS短文件文件解析Access注入数据库泄漏

第四十一天 一、ASP-SQL注入-Access数据库 1.解释 ACCESS数据库无管理帐号密码&#xff0c;顶级架构为表名&#xff0c;列名&#xff08;字段&#xff09;&#xff0c;数据&#xff0c;所以在注入猜解中一般采用字典猜解表和列再获取数据&#xff0c;猜解简单但又可能出现猜解…

flask和django的对比

文章目录 1. 简介2. 安装和设置3. 路由和视图4. ORM5. 管理界面6. 社区和文档7. 性能结论 当涉及构建 Web 应用程序时&#xff0c;Flask 和 Django 是两个最受欢迎的 Python Web 框架之一。它们都提供了强大的工具和功能&#xff0c;但在某些方面却有所不同。本文将对 Flask 和…

Vue-路由介绍

目录 一、思考引入 二、路由介绍 一、思考引入 单页面应用程序&#xff0c;之所以开发效率高&#xff0c;性能高&#xff0c;用户体验好&#xff0c;是因为页面按需更新。 而如果要按需更新&#xff0c;首先需要明确&#xff1a;访问路径和组件的对应关系。该关系通过路由来…

microsoft的azure语音,开发环境运行正常,发布到centos7线上服务器之后,无法运行

最近在做AI语音对话的功能&#xff0c;用到了azure的语音语音服务&#xff0c;开发的时候还算顺利&#xff0c;部署到线上后&#xff0c;发现在正式服上无法完成语音转文本的操作&#xff0c;提示&#xff1a; org.springframework.web.util.NestedServletException: Handler d…

数字图像处理知识点

数字图像处理知识点 一、绪论1、数字图像处理相关概念2、数字图像处理流程1.3 数字图像处理主要研究内容二、视觉与色度基础1、图像传感器与二维成像原理2、三基色2.1 三基色原理2.2 亮度方程3、HSI模型3.1 HSI模型优点3.2 RGB到HSI转换三、数字图像处理基础1、图像的数字化及表…

linux Shell编程之条件语句

条件测试操作 test命令 条件测试操作 Shell环境根据命令执行后的返回状态值&#xff08;$?&#xff09;来判断是否执行成功&#xff0c;当返回值为0&#xff08;真true&#xff09;时表示成功&#xff0c;返回值为非0值&#xff08;假false&#xff09;时表示失败或异常。 t…

C++ | Leetcode C++题解之第77题组合

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> temp;vector<vector<int>> ans;vector<vector<int>> combine(int n, int k) {// 初始化// 将 temp 中 [0, k - 1] 每个位置 i 设置为 i 1&#xff0c;即 [0, k - 1] 存…

单例模式析构时持久化

#include <iostream> #include <fstream> class Singleton { private: // 私有构造函数和拷贝构造函数/赋值运算符&#xff0c;确保单例 Singleton() { // 构造函数中的初始化代码 std::cout << "Singleton created\n"; } ~Singleton()…

用最简单的示例去理解:Dijkstra最短路径算法

Dijkstra算法是一种用于解决单源最短路径问题的经典算法&#xff0c;它能够计算出从单个源节点到图中所有其他节点的最短路径。 以下是Dijkstra算法的基本步骤&#xff1a; 初始化&#xff1a;将起始节点的距离设置为0&#xff0c;将所有其他节点的距离设置为无穷大&#xff0…

如何在您的域名中使用 Google Apps 创建 SPF 记录

关于 SPF 记录 SPF 记录是一种域名服务&#xff08;DNS&#xff09;记录&#xff0c;用于标识哪些邮件服务器被允许代表您的域发送电子邮件。它与在您的 DNS 区域中添加 MX 或 A 记录一样简单。 为什么它很重要&#xff1f; 如今&#xff0c;几乎所有滥用电子邮件消息都携带…