C语言
朝歌1122
计算机科学与技术
展开
-
DES原理学习以及C语言实现(五)
五、十六轮循环以及IP逆置换循环十六次上一篇中的步骤。IP逆置换表如下(其置换方法与IP置换一样):逆置换的数据就是最终的加密密文。C语言代码:(完整的,未整理)#include<stdio.h>#include<stdlib.h>//要使用malloc是要包含此头文件#include <memory.h>//要使用memset是要...原创 2020-03-16 20:09:29 · 366 阅读 · 0 评论 -
DES原理学习以及C语言实现(四)
四 、密码函数F密码函数F的输入接收两个输入,32位的用户输入的需要加密的数据和48位对应的子密钥。F函数过程如下:1、先将数据的右半部分Ri通过扩展置换E从32位扩展道48位。2、扩展后48位与48位的密钥进行异或运算。3、异或运算后在进行S盒置换,将48位的数据变为32位的数据。4、经过(3)后的32位数据进行一个P盒置换。5、再将这个32位的数据与左边的数据进行异或运...原创 2020-03-16 19:16:21 · 583 阅读 · 0 评论 -
DES原理学习以及C语言实现(三)
三、子密钥Ki及获取子密钥的获取主要通过置换和移位运算得到。DES的密钥长度时64位,由用户输入。但参与加密的只有56位。用户输入的64位按照8*8矩阵排列,把其中每行的第8个用于奇偶检验。经过一系列的置换和移位得到K1~K16共16个子密钥。每个密钥长度是48位(压缩过后的)。其每个子密钥实现过程如下:1、首先将输入的64位密钥按照8*8排列,将每行第8个去掉。2、然后对剩下...原创 2020-03-16 12:17:48 · 456 阅读 · 0 评论 -
DES原理学习以及C语言实现(二)
二、初始置换函数IP以下就是置换表。是一个8*8矩阵。其中数字代表第一个,从一排从左向右数。比如58就是第58个。它的意思就是将用户的输入矩阵中的第58个放在第一个(与第一个置换位置),第1个则放在第58位。下表的第58个数字就是1。58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,5...原创 2020-03-15 23:14:44 · 401 阅读 · 0 评论 -
把int变量赋值给char数组 C语言
char p[10];int i;for(i=0;i<10;i++){ p[i]=(char)('0'+i); }原创 2020-03-15 22:49:18 · 5385 阅读 · 1 评论 -
摸拟退火算法 Simualtea Annealing AIirthm(SAA)
1:固体退火过程 固体退火是将固体加热到熔化,在冷却使之凝固成规整晶体的热力学过程。文献原文描述: 固体加热时, 固体粒子的热运动不断增强,随着温度的升高 , 粒子与其平衡位置的偏离越来越大 , 固体的规则性逐渐被破 坏 . 当粒子排列从较有序的结晶态变为无序的液态时便完成熔解过程 . 熔解过程的目的是消出系统中原先可能存在的非均匀状态 , 该过程中系统的能量...原创 2018-09-23 20:55:02 · 542 阅读 · 0 评论 -
数据结构 顺序表 将顺序表以a1为界重新排列 前面比a1小,后面比a大
题目: 将顺序表(a1,a2,…,an)重新排列以a1为界的两部分:a1前面的值均比a1小,a1后面的值均比a1大(这里假设数据元素的类型具有可比性,不妨设为整型)代码:#include <stdio.h>#include <stdlib.h>#define MAXSIZE 100typedef int datatype;typ...原创 2018-09-14 20:03:02 · 4147 阅读 · 0 评论 -
数据结构 将两个有序顺序表合成一个有序顺序表
题目: 有顺序表A和B,其元素均按从小到大的升序排列,编写一个算法,将它们合并成一个顺序表C,要求C的元素也按从小到大的升序排列代码:#include<stdio.h>#define MAX 100typedef int datatype;typedef struct{ datatype a[MAX]; int size;}sequenc...原创 2018-09-14 21:51:37 · 14260 阅读 · 0 评论 -
数据结构 二叉树遍历创建
数据结构,二叉树的创建,递归,非递归。#include<stdio.h>typedef char datatype;typedef struct node{ datatype data; struct node *lchild,*rchild;}bintnode;typedef struct stack{ bintnode *data...原创 2018-11-14 21:19:53 · 198 阅读 · 0 评论 -
数据结构 栈总代码
#include<stdio.h>#define MAX 100typedef int datatype;typedef struct{ datatype a[MAX]; int top;}sequence_stack;void init(sequence_stack *L){ L->top=0;}int empty(sequenc...原创 2018-09-17 15:56:19 · 305 阅读 · 0 评论 -
数据结构 顺序表总程序
数据结构课本上的所有的关于顺序表的所有的算法总结。 代码如下:#include<stdio.h>#define MAX 100typedef int datatype;typedef struct{ datatype a[MAX]; int size;}sequence_list;void init(sequence_list *L){...原创 2018-09-16 18:55:03 · 370 阅读 · 0 评论 -
数据结构-线性表-栈的实例二进制转化为十进制
二进制转化为十进制,是从一串二进制数的末尾(右边)开始,每位上数(0或1)×2^该数是第几个(从0开始)。 例如:二进制数1101.01转化成十进制 1101.01(2)=1*20+0*21+1*22+1*23 +0*2-1+1*2-2=1+0+4+8+0+0.25=13.25 所以总结起来通用公式为 abcd.efg(2)=d*20+c*21+b*22+a...原创 2018-06-02 18:48:29 · 804 阅读 · 0 评论 -
数据结构 线性表 通过递归的方式输出反字符串
任意输入一个字符串,以#结束,然后反向输出。比如,输入abcdefg#,输出的就是gfedcba。分析如下图。难度在于,是任性输入的字符串,也就是不知道,是输入多少位。用递归的方法就比较简单。代码如下:#include<stdio.h>void print(){ char a; scanf("%c",&a); if( a != '#' ) { prin...原创 2018-06-04 22:03:22 · 260 阅读 · 0 评论 -
数据结构 线性表 递归和迭代实现斐波那契数列问题
斐波那契数列指这个数列从第3项开始,每一项都等于前两项之和。 问题:已知一对兔子每一个月可以生一对小兔子,而一对兔子出生后.第三个月开始生小兔子假如一年内没有发生死亡,则一对兔子开始,第N个月后会有多少对? 这个兔子问题就可以用斐波那契数列来解觉。 首先呢,我们用迭代的方式。#include&...原创 2018-06-05 16:47:16 · 299 阅读 · 0 评论 -
数据结构 线性表 递归实现汉诺塔
关于汉诺塔的问题,谷歌如下:最早发明这个问题的人是法国数学家爱德华·卢卡斯。传说越南河内某间寺院有三根银棒,上串64个金盘。寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子;预言说当这些盘子移动完毕,世界就会灭亡。这个传说叫做梵天寺之塔问题(Tower of Brahma puzzle)。但不知道是卢卡斯自创的这个传说,还是他受他人启发。若传说属实,僧侣们需要264 − 1步...原创 2018-06-05 17:02:05 · 243 阅读 · 0 评论 -
数据结构 线性表 递归实现八皇后问题
百度 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。 ...原创 2018-06-05 20:09:52 · 330 阅读 · 0 评论 -
数据结构 -线性表 -循环表
不用头指针,而是用指向终端结点的尾指针来表示循环链表,这个就是循环列表。如图:那么要判断单链表中是否有环,主要有以下两种方法: 方法一:使用p、q两个指针,p总是向前走,但q每次都从头开始走,对于每个节点,看p走的步数是否和q一样。如图,当p从6走到3时,用了6步,此时若q从head出发,则只需两步就到3,因而步数不等,出现矛盾,存在环。 方法二:使用p、q两个指针,p每次向前走一步,q每次向前走...原创 2018-06-01 19:22:23 · 426 阅读 · 0 评论 -
数据结构 线性表 约瑟夫问题
约瑟夫问题:著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数到3,循环直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,于是,他将朋友与自己...原创 2018-06-01 20:14:18 · 744 阅读 · 0 评论 -
数据结构 - 线性表-双向循环链表
双向循环列表是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。 一个例子:输入一个数,然后给二十六个字母排序,如果输入的是整数,就将字母向后移这个整数个位,如果是负数,就向前移这个整数个位。首先,建立一个空节点,然后按照上图的循环开辟空间赋值。#include<stdio.h...原创 2018-06-02 16:26:24 · 325 阅读 · 0 评论 -
数据结构-线性表-栈
栈,是一种只能在表尾进行插入或删除操作的线性表。按照先进后出的原则储存数据。先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。 栈的相关概念:栈顶与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。压栈:栈的插入操作,叫做进栈,也称压栈、入栈。弹栈:栈的删除操作,也叫做出栈栈的相关操作:弹栈,通常命名为pop压栈,通常命名为push求栈的大小判断栈是...原创 2018-06-02 18:31:09 · 197 阅读 · 0 评论