16 软专
admin
2024-02-13 03:22:26
0

数据结构

第一题 完全二叉树的判定

思路:

  • 树的广度优先遍历实现,根节点先入队,然后出队
  • 当p不为空时,不管p左右孩子是否为空,全部入队列
  • 当p为空时,跳出循环,全部剩余节点出队列,如果后序存在非空节点,那么不是完全二叉树

代码:

typedef struct tnode{int data;struct tnode *left, *right;
}*tree;bool iscompeltetree(tree root){struct tnode *p =root;tree queue[maxsize];int front = -1, rear = -1; queue[++rear] = root;while(rear != front){p = queue[++front];if(p){queue[++rear] = p->left;queue[++rear] = p->right;}else{break;}}while(rear != front){p = queue[++front];if(p) return false;}return true;
} 

第二题 深度优先遍历实现拓扑排序

若G是一个使用领接表存储的有向图,设计一个算法,利用深度优先遍历算法,对图中节点进行拓扑排序

思路:

  • 深度优先遍历最深层的一个节点一定是拓扑序列的最后一个节点,然后依照深度优先遍历修改一下即可

代码:

typedef struct ArcNode{			//边结点 int adjvex;struct ArcNode *next;
}ArcNode; typedef struct VNode{			//顶点节点 int data;struct ArcNode *firstarc;
}VNode; typedef struct AGraph{			//领接表 VNode adjlist[maxsize];int vexnum, edgenum;
}AGraph;int visited[maxsize] = {0};
int topo[maxsize];
int t;void dfs(AGraph *G, int v){visited[v] = 1;struct ArcNode *p =  G->adjlist[v].firstarc;while(p!=NULL){if(visited[p->adjvex] == 0){dfs(G,p->adjvex);}p =p->next;}topo[t--] = v;						//深度最深的,是拓扑序列的最后一位,然后依次递减 
} void toposort(AGraph *G){t = G->vexnum-1;for(int i =0; i < G->vexnum; i++){if(visited[i] == 0){dfs(G,i);}}
}

程序设计

第一题 找到第k大整数 快排思想

1、假设包含m个元素的整型数组a,该数组存放了m个不重复的整数,编写函数求数组数组中第k大的整数,m>=1,1<=k<=m

思路:

  • 快排思想,每次快排都可以找到一个数的大小位置,所以在经过每次划分后,对loc中间节点与m-k进行比较,如果loc>m-k,则在左半边进行查找,如果loc

代码:

//快速排序的思想,每次交换后i,j指针将数组划分为两部分,左边是小于low的,右边是大于low的
int quicksort(int a[], int m, int k){int low = 0, high = m-1;while(low < high){int i = low,  j = high+1;int pivot = a[low];while(i < j){i++;while(a[i] <= pivot) i++;j--;while(a[j] > pivot) j--;if(i < j){int temp = a[i];a[i] = a[j];a[j] = temp;}}int temp = a[j];a[j] = a[low];a[low] = temp;if(j == m-k){break;}else if(j > m-k){high = j-1;}else{low = j+1;}}printf("第%d大的数为:%d",k,a[m-k]);return a[m-k];
} 

第二题 数组的二进制加1

2、假设用整型数组存储二进制数,即数组的一个元素存放二进制数的一位,编写函数实现该存储形式的二进制数的加1运算

思路:

  • 添加一个参数保存进位
  • 同时还需要判断最后位数需要加1,需要的话,整体后移

代码:

//思路:先不断加1,然后判断最后一位是否需要加1
void binaryarray(int a[], int n){int carry = 1;for(int i = n-1; i >=0; i--){int temp = a[i]+carry;a[i] = temp%2;carry = temp/2;}if(carry){for(int i = n-1; i >=0; i--){a[i+1] = a[i];}a[0] = carry;}
} 

第三题 机器人对话

现在有两个机器人对话M1,M2要进行对话,规则如下
M1只会说"Y",“N”,“2”
M2只会说"y",“n”,“1”
M1主动说话
当一个机器人说的不是数字时,他自己必须继续说话,对方不能说话
当一个机器人说出数字时,自己停止说话,对方接着说话,也可以不说话从而结束对话
编写程序判断输出的任意非空字符串是否是两个机器人对话终止时的形成的串

思路:

  • 按照题意模拟即可
  • 先判断开头是否是机器人M1说话,不是直接返回fasle
  • 是的话,继续判断是否是M1和M2轮流说话,中间的标志就是M2与M1之间的对话之间一定得有1或者2进行轮换,如果没有,则不是机器人对话,直接break

代码:

bool isrobot1(char s){if(s == 'Y' || s == 'N' || s=='2'){return true;}else return false;
}bool isrobot2(char s){if(s == 'y' || s == 'n' || s=='1'){return true;}else return false;
}bool iscommuncate(char *s1){int i = 0;if(!isrobot1(s1[i++])) return false;				//第一个不是机器人M1说话 while(s1[i] != '\0'){while(isrobot1(s1[i]) && s1[i] != '2'){			//是机器人M1说话,并且不结束 i++;										//继续说话 }if(s1[i++]!='2') break; 						//如果M1还没结束,M2就说话, 不符合规则 while(isrobot2(s1[i]) && s1[i] != '1'){			//是机器人M2说话,并且不结束 i++;										//继续说话 }if(s1[i++]!='1') break; 						//如果M2还没结束,M1就说话, 不符合规则  }if(s1[i] != '\0') return false;						//不是机器人之间的对话 else return true;									//是机器人之间的对话 
}	

相关内容

热门资讯

7月青甘旅游7天6夜组团价钱多... 七月的青甘大地,简直是大自然打翻了调色盘!湛蓝的青海湖像块巨大的蓝宝石镶嵌在草原上,张掖丹霞的七彩山...
海南旅游三天两晚攻略分享,三亚... 三亚,这座镶嵌在南海之滨的璀璨明珠,以其得天独厚的自然风光和丰富多样的旅游资源,吸引着无数游客纷至沓...
黄山旅游一个人大概多少钱?39... 黄山旅游一个人大概多少钱?398元3天2晚黄山 黄山,作为中国著名的风景名胜区,以其奇松、怪石、云海...
亲子苏杭4天3晚,必去的十大景... # 苏杭4天3晚本地团旅游攻略:跟着丽丽,把江南玩出诗意来! 第一站:出发前的“小确幸”——有个靠...
甘南八天七晚:漫步桑科草原,走... 甘南,这片被《中国国家地理》誉为“青藏之窗”的净土,以草原、雪山、藏寨、寺庙的绝美组合,编织出一幅远...
亲子苏杭4天3晚|必去十大景点... # 苏杭4天3晚本地团旅游攻略|跟着丽丽游江南,太值了! 第一段:遇见丽丽,才知道什么叫“神仙导游...
张家界旅游四天三晚多少钱?费用... 嘿,大家好!我是小李,刚从张家界玩了四天三晚回来,感觉整个人都精神了!之前我在网上搜“张家界旅游四天...
找一篇安徒生童话的故事 就要主... 找一篇安徒生童话的故事 就要主要内容最好简短些《海的女儿》故事梗概是:海王有一美丽而善良的女儿小人鱼...
跟团带家人游甘南 六 天,费用... 带家人跟团游甘南六天,费用与玩法全知道 甘南藏族自治州,这片位于甘肃西南部的神秘土地,以其壮丽的自然...
一游客爬到泰山悬崖峭壁上打坐,... 近日,山东泰山风景区,一游客爬到悬崖峭壁上打坐,后续被工作人员劝下。 对此,泰山风景区工作人员回...
灵异小说名字 灵异小说名字灵异录山海新传
贵州玩3天2晚需要多少钱?贵阳... 一直听闻贵州的山水如画,民族文化丰富多彩,终于,在这个假期,我决定踏上这片神奇的土地,开启一场3天2...
主角有爱丽丝的动漫 主角有爱丽丝的动漫有很多都有爱丽丝啦!比如说潘朵拉之心你是说主角叫爱丽丝,还是有爱丽丝能力?爱丽丝称...
海南旅游三天两晚全攻略,去三亚... 三亚,这座镶嵌在南海之滨的热带天堂,以其碧海蓝天、洁白沙滩和丰富的旅游资源,吸引着无数情侣和游客前来...
12345是中山市市长热线吗 12345是中山市市长热线吗所在地的区号+12345,就是当地的市长公开热线是呢,我肯定今天库充区的...
夏天贵州旅游7天6夜当地团价格... 夏天去贵州旅游真是选对了地方!七月的贵州,平均气温才二十多度,青山绿水间满是清凉,瀑布群气势磅礴,古...
暑期贵州旅游7日6晚本地团费用... 七月的贵州,简直是退休朋友们的避暑天堂!青山如黛,绿水潺潺,黄果树瀑布的磅礴、荔波小七孔的灵秀、千户...
我男朋友太瘦了,怎么吃都长不胖... 我男朋友太瘦了,怎么吃都长不胖什么原因我男朋友太瘦了,怎么吃都长不胖什么原因你好,体型偏瘦跟遗传及胃...
亲子苏杭游攻略,4天3晚十大必... # 苏杭4天3晚本地团旅游攻略:跟着丽丽,玩转江南水乡 第一站:初遇丽丽,原来旅行可以这么美! 这...
你会为了一个你爱的人而放弃她吗 你会为了一个你爱的人而放弃她吗当爱归于零的时候,无论过去他是否爱,还是后来才移情别恋?还是从未真正的...