自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 KMP算法

#include <stdio.h>#include <stdlib.h>#include <string.h>int kmp(char s[], char t[], int n, int next[]){ int i= n, j= 1; int slen= strlen(s) - 1, tlen= strlen(t) - 1; while (i <= slen && j <= tlen) {

2020-12-24 12:37:40 94

原创 最小生成树

#include <stdio.h>//最小生成树 #include <stdlib.h>#define inf 1e9struct table;//prim = dijkstra typedef struct table *Table;struct table{ int x; int known; int dist; int lastVex;};void doub(int a[11][11], int dist, int i, .

2020-12-24 12:36:24 70

原创 9.10 Dijksta算法的改动

(a)如果新路径长度=当前已知路径长度,则发现了一条相同长度的最短路径,增加最短路径个数,有count[w]=count[w]+count[v],即增加的路径数量等于上一跳v的总最短路径数量(此时v是已知)如果发现的新路径<当前已知路径,则发现了一条新的最短路径,则替换最短路径个数,有count[w]=count[v](b) 如果新路径长度=当前已知路径长度,则发现了一条相同长度的最短路径,比较该路径与已知路径的边数,选择边数更少的那个作为当前路径如果发现的新路径<当前已知路径,则发现..

2020-12-24 12:21:14 522

原创

//图的遍历 void DFS ( Vertex V ) { visited[ V ] = true; for ( V 的每个邻接点 W ) if ( !visited[ W ] ) DFS( W );} //应用实例(拯救007) int DFS ( Vertex V ) { visited[V] = true; if ( IsSafe(V) ) answer = YES; else { for ( V 的每个邻接点 W ) if ( !visi

2020-12-24 12:04:55 70

原创 2020-12-24

We add a dummy NO + 1thO element, which we’ll call ProbablyFalseO. ProbablyFalseOsatisfies PfalseO < ProbablyFalseO < MaybeO. Partition the array around ProbablyFalseO as inthe previous exercise. Suppose that after the partition, ProbablyFalseO wi.

2020-12-24 09:58:13 81

原创 不使用递归实现归并排序

void Mergesort( ElementType A[ ], int N ){ ElementType *TmpArray; int SubListSize, Part1Start, Part2Start, Part2End; TmpArray = malloc( sizeof( ElementType ) * N ); for( SubListSize = 1; SubListSize < N; SubListSize *= 2 ) { Part1Start = 0; w.

2020-12-24 09:40:21 433

原创 排序基本算法整合

void Swap(int *a,int *b){ int temp; temp=*a; *a=*b; *b=temp;}//冒泡排序 void Bubble_Sort( ElementType A[], int N ) { for ( P=N-1; P>=0; P-- ) { flag = 0; for( i=0; i<P; i++ ) { /* 一趟冒泡 */ if ( A[i] > A[i+1] ) {

2020-12-24 09:19:32 62

原创 排序时间稳定表

2020-12-24 08:24:45 116

原创 d-堆 父亲儿子公式

2020-12-23 21:39:56 234

原创 堆的基本法

#define MaxData INT_MAX;#include<limits.h>typedef struct HeapStruct *MaxHeap;struct HeapStruct { ElementType *Elements; /* 存储堆元素的数组 */ int Size; /* 堆的当前元素个数 */ int Capacity; /* 堆的最大容量 */};MaxHeap Create( int MaxSize ){ /* 创建容量为MaxSize的空的最大

2020-12-23 21:06:01 53

原创 散列表和散列表的应用

typedef int position; typedef struct HashTbl *HashTable;struct HashTbl{ int TableSize; Cell *TheCells;}H ;HashTable InitializeTable( int TableSize ) { HashTable H; int i; if ( TableSize < MinTableSize ) { Error( "散列表太小" ); return

2020-12-23 20:26:29 95

转载 哈夫曼树解码

#include <stdio.h>#include <stdlib.h>#define leaf 1struct Node;typedef struct Node *ptrtoNode;typedef ptrtoNode position;typedef ptrtoNode tree;struct Node{ char x; position left, right; int kind;};int main(){ tree .

2020-12-23 18:28:35 132

原创 哈夫曼树的构造

typedef struct TreeNode *HuffmanTree;struct TreeNode{int Weight;HuffmanTree Left, Right; }HuffmanTree Huffman( MinHeap H ) { /* 假设H->Size个权值已经存在H->Elements[]->Weight里 */ int i; HuffmanTree T; BuildMinHeap(H); /*将H->Elements[]按权值调整为最小堆*/.

2020-12-23 18:23:44 91

原创 2020-12-23

2020-12-23 18:04:10 43

原创 同构树

2020-12-23 16:40:36 110

原创 AVL单纯的双旋转

双旋转

2020-12-23 16:40:20 70

原创 AVL树的实现

#include<stdio.h>#include<stdlib.h>//3,1,4,6,9,2,5,7,#include<string.h>#define HEIGHT(p)((p==NULL)?-1:(((Node*)(p))->height))#define MAX(a,b)((a)>(b)?(a):(b))typedef int Type;typedef struct AVLTreeNode{ Type key;

2020-12-23 15:15:16 194

原创 二叉搜索树的查找,删除,插入

typedef struct TreeNode *BinTree;typedef BinTree Position;struct TreeNode{ ElementType Data; BinTree Left; BinTree Right;} ;//这里返回的都是找到的节点的位置的指针Position Find( ElementType X, BinTree BST ) //查找的递归方法 { if( !BST ) return NULL; /*查找失败*/ if( X

2020-12-23 14:08:55 60

原创 树的遍历

typedef struct TreeNode *BinTree;typedef BinTree Position;struct TreeNode{ ElementType Data; BinTree Left; BinTree Right;} ;void PreOrderTraversal( BinTree BT ) //先序 //给的应该是一个根吧 { if( BT ) { printf("%d", BT->Data); PreOrderTraversal

2020-12-20 22:09:20 167 1

原创 线性表数组存储

//线性表数组实现//1.结构 typedef struct LNode *List;struct LNode{ ElementType Data[MAXSIZE]; int Last;}; struct LNode L;List PtrL;/*访问下标为 i 的元素:L.Data[i] 或 PtrL->Data[i]线性表的长度:L.Last+1 或 PtrL->Last+1*/ //2.初始化List MakeEmpty( ) { List PtrL

2020-12-20 21:14:44 174

原创 线性表的链式存储实现

//线性表的链式存储实现typedef struct LNode *List;struct LNode{ ElementType Data; List Next;}; struct Lnode L;List PtrL;//1.求表长int Length ( List PtrL ){ List p = PtrL; /* p指向表的第一个结点*/ int j = 0; while ( p ) { p = p->Next; j++; /* 当

2020-12-20 21:13:54 43

原创 数据结构

2020-12-20 21:13:31 40

原创 多项式相加

typedef struct PolyNode *Polynomial;struct PolyNode { int coef; // 系数 int expon; // 指数 struct PolyNode *link; // 指向下一个节点的指针};Polynomial P1, P2;void Attach( int c, int e, Polynomial *pRear ) { /* 由于在本函数中需要改变当前结果表达式尾项指针的值, *//* 所以函数传递进来的是结点指针的地址,*

2020-12-20 21:13:12 69 1

原创 循环队列

这个用的形势是front =-1 rear=-1,(在非循环中)或者f,r,= 0(在循环中)然后当想要加入东西时,rear向后一个加入,想要删除时,front向后一个,才指向所要删除的位置,然后删除后,front指向的空格有没有东西了。懂了意思然后可以自己发挥吧,我比较喜欢用front和rear都正好在自己的点上的。#define MaxSize <储存数据元素的最大个数>typedef struct QNode *Queue;struct QNode { ElementTyp

2020-12-20 21:05:10 1285

原创 一个数组实现两个栈

s[max_size]=0top1=0;top2=max_size;bool isEmpty(int index){ if(index == 0 && top1 < 1) return true; if(index == 1 && top2 > len) return true; return false;}void push(int index, int data){ //已满 if(top1 > top2) ret.

2020-12-20 20:56:04 78

原创 队列的链表实现

我认为比较难,还是用数组的来表示吧结构//队列的链式存储实现struct Node{ ElementType Data; struct Node *Next;}; struct QNode{ /* 链队列结构 */ struct Node *rear; /* 指向队尾结点 */ struct Node *front; /* 指向队头结点 */}; typedef struct QNode *Queue;Queue PtrQ;/* 链式栈接口的定义头文件 */#define

2020-12-20 20:22:28 118

原创 线性顺序队列的基本实现

#include<stdio.h>#include<stdlib.h> /* 队的最大长度 */#define MAX_QUEUE_SIZE 100/* 队列的数据类型 */typedef int datatype; /* 静态链的数据结构 */typedef struct queue{ datatype sp_queue_array[MAX_QUEUE_SIZE]; /* 队头 */ int front; /* 队尾 */

2020-12-20 20:18:46 137

原创 中缀转换成为前缀和后缀并计算

1将中缀表达式转换为前缀表达式:遵循以下步骤:(1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2;(2) 从右至左扫描中缀表达式;(3) 遇到操作数时,将其压入S2;(4) 遇到运算符时,比较其与S1栈顶运算符的优先级:(4-1) 如果S1为空,或栈顶运算符为右括号“)”,则直接将此运算符入栈;(4-2) 否则,若优先级比栈顶运算符的较高或相等,也将运算符压入S1;(4-3) 否则,将S1栈顶的运算符弹出并压入到S2中,再次转到(4-1)与S1中新的栈顶运算符相比较;(5) 遇到括号

2020-12-20 16:38:38 206

原创 栈的基本,数组链表存储

数组存储代码一#include<stdio.h>#include<stdlib.h>#define MaxSize 20typedef char ElementType;typedef struct SNode *Stack;struct SNode{ ElementType Data[MaxSize]; int Top;};//栈的顺序存储实现Stack InitStack(){ Stack S; if((S=(Stack)malloc(sizeof(

2020-12-20 16:01:11 79

原创 单链表,双向链表,循环链表

1.链表链表是线性表的一种,由一系列节点(结点)组成,每个节点包含一个数据域和一个指向下一个节点的指针域。链表结构可以克服数组需要预先知道数据大小的缺点,而且插入和删除元素很方便,但是失去数组随机读取的优点。链表有很多种不同类型:单向链表,双向链表和循环链表。在链表中第一个节点叫头节点(如果有头节点)头节点不存放有效信息,是为了方便链表的删除和插入操作,第一个有效节点叫首节点,最后一个节点叫尾节点。2.单向链表(单链表)单向链表,它包含两个域,一个信息域和一个指针域。这个链接指向表中的下一个节点,而

2020-12-19 15:02:31 279

原创 多项式相加问题和相乘问题

typedef struct PolyNode *Polynomial;struct PolyNode { int coef; int expon; Polynomial link;};Polynomial ReadPoly(){ Polynomial P, Rear, t; int c, e, N; scanf("%d", &N); P = (Polynomial)malloc(sizeof(struct PolyNode)); /* 链表头空结点 */ P-&

2020-12-19 14:28:56 150 1

原创 链表置逆

思路将原来的链表用头插法重新插入头节点后面代码一void inverseLink(SNODE *head){ SNODE *p,*q; if(head->next!=NULL)//链表不空 { p=head->next; q=p; head->next=NULL; while(p!=NULL)//头插法重新插入 { q=p->next;

2020-12-19 14:21:21 122 1

原创 isPrime算法

int isPrime(unsigned int N){ if (N == 1) return 0; if (N % 2 == 0) return 0; for (int i = 3; i*i <= N; i += 2) { if (N % i == 0) return 0; } return 1;}

2020-12-18 09:23:11 415

原创 1.1最大子列和问题

1.1最大子列和问题算法一int MaxSubseqSum1( int A[], int N ){ int ThisSum, MaxSum = 0;int i, j, k;for( i = 0; i < N; i++ ) { /* i是子列左端位置 */for( j = i; j < N; j++ ) { /* j是子列右端位置 */ThisSum = 0; /* ThisSum是从A[i]到A[j]的子列和 */for( k = i; k <= j; k++ )This

2020-12-18 09:21:29 54

原创 A. 实验7_2_数组查找_指针

题目描述有n个互不相同的整数,存储在数组中。在这n个整数中查找m个整数,如果存在,则打印出与之相邻的整数;否则就显示无此数。输入与输出要求:首先输入一个整数n以及n个整数(n的范围是1—1000),然后输入整数m,代表查询次数(m的范围是1—100),接着输入m个待查询的数。输出m行查询的结果,每次的查询结果中可能有一个数、两个数或没有数。若没有数则输出“NULL”。要求:实现如下函数完成一...

2020-01-01 19:04:40 556

原创 D. 实验8_5_寻找鞍点

运行时间限制: 1000 运行内存限制: 65536作者: scshuanghai 是否specialjudge: False题目描述问题描述:任意给定一个nm的矩阵,矩阵的行数为n,列数为m。你的任务是寻找该矩阵的鞍点。一个矩阵的鞍点即该位置上的元素在所在行上最大,在所在列上最小。有的矩阵也可能没有鞍点。不难证明,如果一个矩阵有鞍点,那么这个鞍点一定是唯一的。如果某个矩阵只有1行(1列)...

2019-11-30 15:58:19 382

原创 C. 实验8_3_设计函数

问题描述:void findMin(int M[][MAX],int x[],int n,int m); 将二维数组M中每列的最小元素,依次放入一维数组x中,二维数组M的行数为n,列数为m。输入与输出要求:输入两个整数n、m,代表二维数组M的行数与列数,n、m的范围均是1—100。然后是n*m个整数,即二维数组M的元素。输出x数组中的元素,每个元素用空格分隔。程序运行效果:Sample ...

2019-11-30 15:26:07 375

原创 B. 实验8_2_推销员的便条

运行时间限制: 1000 运行内存限制: 65536作者: scshuanghai 是否specialjudge: False题目描述问题描述:某公司有四个销售员(代号1—4),负责销售五种产品(代号1—5)。每个销售员都把当天售出的每种产品各写一张便条交上来。每张便条包含销售员的代号、产品的代号、这种产品的销售额。我们搜集到了每个月的所有便条,你的任务是根据这些便条,计算出每人、每种产品...

2019-11-30 11:49:46 391

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除