算法设计题
算法题目
是落落呢
这个作者很懒,什么都没留下…
展开
-
二叉排序树查找
设计一个算法,在二叉排序树bt上查找关键字为k的记录,成功时返回该结点的指针,否则返回NULL;//数的结构体typedef struct Node{ struct Node *lchild; int data; struct Node *rchild; /* data */}Node,Tree;Node* search(Tree *bt,int k){ if(bt){ if(bt->data == k)原创 2021-11-29 07:10:46 · 180 阅读 · 0 评论 -
集合A∩B
有集合A和集合B,要求设计生成集合C=A∩B的算法,其中集合A,B和C都用链式存储结构表示。(这个和合并两个有序的链表相似)typedef struct node{ char data; struct node *next;}Node,Sqlist;bool find(Sqlist *head, Node *p){ int tag =0; Node *q = head->next; while(q){ if(q->data ==原创 2021-11-24 00:35:59 · 1078 阅读 · 0 评论 -
单链表内对称
设计判断单链表中结点是否关于中心对称算法。例如,某链表的各个结点数据分别是 C,S,U,S,T,S,U,S,C 即为中心对称。用到的栈和队列操作#define SIZE 20typedef struct node{ char elem; struct node *next;}Node,Sqlist;typedef struct{ char data[SIZE]; int top,base;}Stack;typedef struct{ char da原创 2021-11-23 21:53:34 · 187 阅读 · 0 评论 -
二叉树高度,宽度
二叉树采用二叉链表存储:编写计算二叉树高度的算法(二叉树的高度也叫二叉树的深度)。编写计算二叉树的最大宽度的算法(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。typedef struct Node{ struct Node *lchild; int data; struct Node *rchild; /* data */}Node,Tree;二叉树高度int high(Tree *t){ Tree *p = t; int HL原创 2021-11-23 21:13:19 · 918 阅读 · 0 评论 -
合并有序单链表
设计将两个有序单链表合并成一个单链表并保持有序的算法。解析:两个链表中的节点两两比较,数值小的放到新的链表里,直至有一个链表为空。//带头结点typedef struct Node{ int data; struct Node *next;}Node,Sqlist;//Head3是合并后的结果void merge(Sqlist *Head1, Sqlist *Head2, Sqlist *Head3){ Node *p, *q,*m; p = Head1-&原创 2021-11-23 01:23:04 · 715 阅读 · 0 评论 -
有向图出度为0
设计统计有向图中出度为零的顶点个数的算法。一、邻接矩阵版本邻接矩阵中一行全为零,才能确定该顶点出度为零typedef struct{ int e_num; //边数 int v_num; //顶点个数 int links[SIZE][SIZE]; //邻接矩阵 char vexs[SIZE];}Graph1;//临接矩阵int account1(Graph *ph){ int num = 0; for(int i = 0; i <原创 2021-11-23 00:24:35 · 1578 阅读 · 0 评论 -
循环队列(无尾指针)
一个循环队列Queue,只有头指针front,不设尾指针,另设一个含有元素个数的计数器count,完成以下程序设计:试写出相应的入队算法。试写出相应的出队算法。解析:不设尾指针,只影响入队,出队依旧是依赖队头指针;但是加了一个count计数,方便了判队空和判队满,而 front+count 就是队尾指针的位置。#define SIZE 10typedef struct{ int data[SIZE]; int front; //头指针 int count; /原创 2021-11-22 23:57:51 · 2788 阅读 · 0 评论 -
折半查找,插入
线性表(a1,a2,a3,…,an)中元素递增有序且按顺序存储与计算机内。要求设计一算法完成:用最少时间在表中查找数值为x的元素;若找不到,则将其插入表中并使表中元素仍然递增有序。解析:有序且顺序存储,特点很明显,用折半查找,折半插入#define SIZE 20typedef struct{ int data[SIZE+1]; //0号位置留空,确保下标和位置一致 int length;}Sqlist;int find(Sqlist *list, int e){原创 2021-11-22 23:22:33 · 477 阅读 · 0 评论 -
查询给定二叉树节点的双亲节点
利用二叉树的层序遍历,借助队列。#define INITSIZE 20//二叉树typedef int ElemType;typedef struct Node{ struct Node *lchild; ElemType data; struct Node *rchild; /* data */}Node,Tree;//队列,存储指向二叉树节点的指针typedef struct{ int front,rear; Node *nodes[IN原创 2021-11-19 22:58:37 · 2014 阅读 · 1 评论 -
无向图邻接矩阵转邻接表
#define SIZE 10//邻接矩阵表示typedef struct{ int e_num; //边数 int v_num; //顶点个数 int links[SIZE][SIZE]; //邻接矩阵 char vexs[SIZE];}Graph1;//邻接表表示typedef struct edgeNode{ //边节点 char vex; int value; struct edgeNode *next;}edge原创 2021-11-19 21:40:13 · 1067 阅读 · 0 评论 -
链式存储的直接插入排序
typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next; }Node,*LinkList;void insert_sort(LinkList *p, LinkList *new){ //创建新链表头结点 *new = (Node *)malloc(sizeof(Node)); (*new)->next = NULL; Node *q = (*p)->next;原创 2021-11-18 12:55:23 · 867 阅读 · 0 评论 -
统计二叉树节点
用C语言或C++给出二叉树的二叉链表存储结构的定义,并设计一个在链式存储结构上统计二叉树中节点个数的递归算法。(就是个二叉树遍历)typedef int ElemType;typedef struct Node{ struct Node *lchild; ElemType data; struct Node *rchild; /* data */}Tree;void count(Tree *t,int *n){ if(t != NULL){原创 2021-11-14 22:14:09 · 760 阅读 · 0 评论 -
稀疏矩阵转置
用C语言或C++给出稀疏矩阵三元组存储结构的定义,并写出矩阵转置的算法。#define SIZE 10typedef struct node{ //三元组单元 int i; int j; int data;}node;typedef struct{ node ARRAY[SIZE]; int x,y,n; //行,列,个数}THREE;第一种方法:直接转置,O(n*y)void invert(THREE *t, THREE *M){原创 2021-11-14 06:04:41 · 685 阅读 · 0 评论 -
邻接表创建图
用C语言或C++给出图的邻接表存储结构的定义,并写出输入一个无向图的算法。typedef struct edgeNode{ //边节点 int pos; int value; struct edgeNode *next;}edgeNode;typedef struct vexNode{ //顶点节点 int data; edgeNode *firstNode;}Vexs[SIZE];typedef struct{ /原创 2021-11-14 04:02:09 · 483 阅读 · 0 评论 -
图的创建和广度优先遍历
用数组存储结构作为图的存储结构的前提下,试编制图的输入及图的广度优先搜索遍历的有关子程序;编制主程序main{}调用这些子程序,并输出遍历结果。typedef struct{ int e_num; //边数 int v_num; //顶点个数 int links[SIZE][SIZE]; //邻接矩阵 char vexs[SIZE];}Graph;void create(Graph *ph){ printf("输入顶点个数:"); scanf(原创 2021-11-14 03:52:52 · 347 阅读 · 3 评论 -
二叉树的输入,遍历
适用二叉链表存储二叉树,实现二叉树的输入,先序遍历,中序遍历,后序遍历的递归算法,编制main程序调用这些子程序,并输出各遍历结果。#include<stdio.h>#include<malloc.h>typedef int ElemType;typedef struct Node{ struct Node *lchild; ElemType data; struct Node *rchild; /* data */}Tree;T原创 2021-11-13 22:05:43 · 2512 阅读 · 0 评论 -
把所有的奇数移到偶数的前面
把所有的奇数移到偶数的前面void new_sort(Sqlist *L){ int i,j; i = 1, j = L->length; while(i < j){ while(i < j && L->r[i].key % 2 != 0) i++; while(j > i && L->r[j].key % 2 == 0) j--;原创 2021-11-06 20:10:22 · 501 阅读 · 0 评论 -
双向冒泡排序
设计一个排序算法:修改冒泡排序过程,实现双向冒泡,即在排序过程中,交替的正反方向进行扫视,若第一趟把关键字最大的记录放在最末尾,则第二趟把关键字最小的记录放到最前端,如此反复,直到所有的记录都已排好序时为止。void double_bubblesort(Sqlist *L){ int i,j; for(i=1;i<=L->length/2;i++){ //最后一趟可以省略 for(j=i;j<=L->length-i;j++){原创 2021-11-06 18:56:24 · 420 阅读 · 0 评论 -
判断回文串
设计一个顺序栈(包括栈的初始化,入栈,出栈,判栈空等操作)和一个链式队列(包括队列的初始化,进队,出队,判队空等操作),并编制主程序main{}利用这个栈队列实现判断一个字符串是否是“回文字符串”的程序,是则打印“yes”,否则打印“no”。说明:“回文字符串”的定义:若一个字符串与其自身的逆串相等,则称该字符串为回文字符串。例如:CHINANIHC就是一个回文字符串。#include"stdio.h"#include"stdlib.h"#include"stdbool.h"#include"ma原创 2021-11-02 21:28:51 · 229 阅读 · 0 评论 -
10进制转8进制
设计一个顺序栈(包括初始化,进栈,出栈,判栈空4个操作),并利用这个栈设计实现一个十进制数化为八进制数的程序。#include"stdio.h"#include"stdlib.h"#include"stdbool.h"#include"malloc.h"#define MAX_SIZE 10typedef int ElemType;typedef struct { //栈结构体 ElemType *base; ElemType *top; int size;原创 2021-11-02 19:24:09 · 986 阅读 · 0 评论