C语言
旭先生
这个作者很懒,什么都没留下…
展开
-
二分查找算法
int binary(element_type a[],element_type x,int n)//数组a:存储的长度为n的有序表(升序)//x:是待查元素//返回值:某有效地址(若x在表中);或NOTFOUND(若x不在表中)//NOTFOUND是指等于-1的常数,表示无效地址{ int left,right,mid; left=0,right=n-1; wh...原创 2018-06-03 17:57:43 · 124 阅读 · 0 评论 -
希尔排序
#include <stdio.h> void Shell(int a[],int n,int b[],int t) { int i,j,k,m,x; for(k=0;k<t;k++) { m=b[k]; for(i=k;i<n;i++){ for (x=a[...原创 2018-07-26 15:10:33 · 240 阅读 · 0 评论 -
二分插入排序
输入:乱序数组输出:顺序数组#include <stdio.h>void Binsert(int a[],int n){ int i,j,left,right,mid,x; for (i=1; i<n; i++) { x=a[i]; left=0;right=i-1; while(left<=ri...原创 2018-07-26 15:07:47 · 1797 阅读 · 0 评论 -
修理牧场
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是Li的总和。但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木...原创 2018-06-02 07:54:22 · 666 阅读 · 0 评论 -
树的遍历
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:4...原创 2018-06-02 07:52:54 · 238 阅读 · 0 评论 -
堆栈操作合法性
假设以S和X分别表示入栈和出栈操作。如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列。请编写程序,输入S和X序列,判断该序列是否合法。输入格式:输入第一行给出两个正整数N和M,其中N是待测序列的个数,M(≤50)是堆栈的最大容量。随后N行,每行中给出一个仅由S和X构成的序列。序列保证不为空,且长度不超过...原创 2018-06-02 07:50:56 · 377 阅读 · 0 评论 -
两个有序链表序列的合并
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。输入样例:1 3 5 -12 4 6 8 10 -1输出样例:1 2 3 4...原创 2018-06-02 07:49:48 · 327 阅读 · 0 评论 -
求链式线性表的倒数第K项
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。输入格式:输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。输出格式:输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。输入样例:4 1 2 3 4 5 6 7 8 9 0 -1输出样例:7//// main.c// ccc//// Cre...原创 2018-06-02 07:48:44 · 444 阅读 · 0 评论 -
两个有序序列的中位数
已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A0,A1,…,AN−1的中位数指A(N−1)/2的值,即第⌊(N+1)/2⌋个数(A0为第1个数)。输入格式:输入分三行。第一行给出序列的公共长度N(0<N≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。输出格式:在一行中输出两个输入序列的并集序列的中位数。输入样例1:...原创 2018-06-02 07:47:39 · 239 阅读 · 0 评论 -
简化的插入排序
本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。输入格式:输入在第一行先给出非负整数N(<10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。输出格式:在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。输入样例:51 2 4 5 73输出样例:1 2 3 4 5 7#include <stdio.h>#in...原创 2018-06-02 07:46:31 · 1548 阅读 · 0 评论 -
装箱问题
假设有N项物品,大小分别为s1、s2、…、si、…、sN,其中si为满足1≤si≤100的整数。要把这些物品装入到容量为100的一批箱子(序号1-N)中。装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以能够容下它的第一个箱子中。请写一个程序模拟这种装箱过程,并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目。输入格式:输入第一行给出物品个数N(...原创 2018-06-02 07:45:15 · 204 阅读 · 0 评论 -
求最大值及其下标
本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。输入格式:输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。输出格式:在一行中输出最大值及最大值的最小下标,中间用一个空格分开。输入样例:6 2 8 10 1 9 10输出样例:10 2#include<stdio.h>int mai...原创 2018-06-02 07:42:43 · 12784 阅读 · 3 评论 -
统计素数并求和
本题要求统计给定整数M和N区间内素数的个数并对它们求和。输入格式:输入在一行中给出两个正整数M和N(1≤M≤N≤500)。输出格式:在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔输入样例:10 31输出样例:7 143#include<stdio.h>int main(){ int M,N,i,num=0,sum=0,flag; scan...原创 2018-06-02 07:39:22 · 2543 阅读 · 0 评论 -
构建哈夫曼树,并输出哈夫曼编码
输入条件:输入从小到大排列的n个正整数,作为叶子的权值,共同完成构建具有n片叶的,根指针为Hroot的哈夫曼树(1)程序前部的定义#include <stdio.h>#include <mm_malloc.h>#include <string.h>#define MAX 999 //监督元#define n 6 /...原创 2018-06-08 20:39:05 · 15934 阅读 · 2 评论 -
二叉树的层数、高度和子孙遍历
层数遍历:typedef struct Snode{ int data; int layer; //layer表示节点的层数 struct Snode * Lson,* Rson; //节点的左右儿子}Snode,*ptr;void level(ptr p,int i){ if(p==NULL) return; ...原创 2018-06-07 15:06:40 · 5165 阅读 · 0 评论 -
Prim算法求最小生成树及其权重
【问题描述】输入有n个顶点的连通图,第一行给出节点个数和边的数目,然后依次输入两个点和两点线段的长度,最后输出最小生成树序列和最小权重。【结构体定义】#include <stdio.h>#include <mm_malloc.h>int N;#define MAX 9999typedef struct edge_node{ int incr_vert ,ve...原创 2018-06-21 11:44:02 · 6673 阅读 · 4 评论 -
栈的出栈语与入栈
初始定义为:#define EMPTY -1 //栈空标识#define SUCC 1 //成功标识#define FAIL 0 //失败标识const int m=1000; //栈空间大小typedef int element_type; //数据类...原创 2018-06-03 20:07:40 · 639 阅读 · 1 评论 -
单向循环加头有序链表的构造
typedef struct Snode{ int data; struct Snode * next;}Snode,*ptr;#define MAX 999#define End_elm 0准备定义如上构造函数如下:ptr creatlinkC()//输入数据是以End_elm为输入结束标记的元素序列//返回值为所构造链表的首指针{ ptr head,f,s...原创 2018-06-03 19:45:37 · 716 阅读 · 1 评论 -
直接插入排序
#include <stdio.h> void Sinsert(int a[],int n) { int i,j,x; for (i=1; i<n; i++) { x=a[i]; for (j=i-1; (j>=0)&&(x<a[j]); j--) { ...原创 2018-07-26 15:11:46 · 176 阅读 · 0 评论