c语言

C语言实现单循环链表

泪湿孤枕 提交于 2020-03-07 04:13:17
第一次在CSDN这边写博客,主要是为了记录自己学习的历程,望诸位共勉。 首先循环链表是神魔恋?其实就是为了解决单链表只能从头开始过于麻烦诞生的,我愿称之为单链表2.0。(所以如果搞不清楚的话建议先学一下单链表。) 那么它和单链表之间是什么关系,单链表的结尾指向的是一个空节点,存着NULL这个空值。那么他在索引的时候出现的问题显而易见,如果你不从头结点开始那你就无法访问全部结点。 循环链表的设计者明显就很鬼才了,我把最后一个结点的指向变成头节点不就可以了,这样我就可以从想开始的地方开始索引,而且都能保证索引到全部结点,然后这个链表就像贪吃蛇咬到自己尾巴一样闭环了,就叫(单)循环链表。 下面贴出代码的具体实现,如有不对欢迎指正。 # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <stdlib.h> # include <time.h> # define ERROR 0 # define OK 1 typedef int EleType ; typedef struct CLinkNode { EleType data ; struct CLinkNode * next ; } CLinkNode , * CLinkList ; //初始化循环链表 int InitCLinkList ( CLinkList *

C语言代码优化示例(一)

隐身守侯 提交于 2020-03-07 03:55:37
在实际产品的软件开发过程中,很多时候会对代码的性能提出要求,追求最快的速度,提高程序运行效率,改善用户体验等,此时此刻,对代码的优化就非常有必要了,掌握代码的优化方法和技巧就很有必要了。 我们用下面的一段短小的代码为例,来看看优化的过程,并且简略分析一下起优化的原理。 这段代码在CRC的校验中有机会用到,功能是将一个字节的数据逐位的颠倒反转。 //功能: 将数据的位反转,即b0->b7,b1->b6...b7->b0 //des: 转换后的目标buffer //src: 源数据 //len: 数据长度 void Invert8 ( unsigned char * des , unsigned char * src , unsigned int len ) { unsigned char i , j , temp ; for ( j = 0 ; j < len ; j ++ ) { temp = 0 ; for ( i = 0 ; i < 8 ; i ++ ) { if ( ( * src ) & ( 1 << i ) ) temp | = 1 << ( 7 - i ) ; } * des = temp ; des ++ ; src ++ ; } } 我们先第一遍运行,看看这个常规写法的运行时间是多少(CPU速度72MHz) 调用:Invert8(dst,src,100);

C语言I作业09

偶尔善良 提交于 2020-03-07 02:15:42
一、本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10027 我在这个课程的目标是 熟练掌握好C语言,培养自己的思维能力,同时加快敲代码速度。 这个作业在那个具体方面帮助我实现目标 帮助我熟练的掌握循环的嵌套使用 参考文献 百度百科、CSDN博客、C语言程序设计 二、本周作业 1.PTA实验作业 1.1 找完数 所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。 输入格式 输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。 输出格式 逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。 若区间内没有完数,则输出“None”。 输入样例: 2 30 输出样例 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 1.1.1数据处理 数据表达: 用了m,n,i,j,sum,k,count=0;其中m,n代表区间[m,n];i,j,k代表循环起点;sum代表因子之和;count表示用于判断是否是完数

C语言中实现通用双链表(类似C++模版的功能)

只愿长相守 提交于 2020-03-06 23:36:23
这篇文章,本来写了快两个小时了,可是提交的时候,居然博客园崩溃了。信息全部都丢失了。 既然这样,那就不啰嗦了,直接拷贝代码。 插入代码的功能也坏了,那就直接复制把: /** * C 和 C++ 的谁好谁坏的争论还在不断的继续,C语言的使用非常的广范,很多大型的系统都是用C 语言来写的。 * C++ 似乎有更好的编程范式。支持面向对象,模版,省去了很多处理。 * C++ 最好不要滥用,具体问题,具体分析。 * */ #include <stdio.h> #include <stdlib.h> /** * 通用链表声明部分 */ struct list_head { struct list_head *next, *prev; }; #define LIST_HEAD_INIT(name) { &(name), &(name) } #define LIST_HEAD(name) \ struct list_head name = LIST_HEAD_INIT(name) #define INIT_LIST_HEAD(ptr) do { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } while (0) static void __list_add(struct list_head * new, struct list_head *

大一学期总结。

限于喜欢 提交于 2020-03-06 21:39:15
1.当初你是如何做出选择计算机专业的决定的? 当初对计算机专业没什么了解,就是觉得这个比较高端能够做游戏就想要学学,此外这个专业也比较热门,于是就选了。 2.对比开篇博客,哪些方面还存在不足? 总结还不够言简意赅。 3.回忆整个学期,如果重新来过一次,你打算做哪些(技术上,而不是态度上的)改变? 加强对指针和递归的学习,这两个东西真的是要多看多用多写才能真的掌握好,此外还想学习C++,因为C++写代码看起来好简单啊。 4.你预备如何规划剩余的2/3? 编程这个东西还是需要时间去提升的,要多练。此外,大学生真的需要增加自学能力,还有需要有求知的欲望,有的时候如果只是应付作业而去打代码,那么自己的能力真的是提不高的。我希望我在 剩下的时间,首先能够好好学习课本内容,完成好老师布置好的作业,遇到自己敢兴趣的算法或者一些操作,要去搞懂它,记下来。 5.对于马上入学的2019级新生,如何学习专业课程(C语言、数据结构、数字逻辑等),请给出你的建议。 C语言: C语言还算比较简单的内容,都是教给你一些基本的概念和操作,我觉得只要完成老师的作业,多看翁凯的视频,基本都能掌握下来,当然了视频如果一遍看不懂的就看几遍,遇到不懂的地方 就暂停下来想想。(当初看链表我看了好几遍才懂的)。 数据结构:我觉得数据结构可以叫做进阶版的C语言,教你各种的数据结构和算法来运用C语言,这个科目比较难学

c语言实现单链表的就地逆置

我怕爱的太早我们不能终老 提交于 2020-03-06 21:20:20
` 有几个需要注意的地方 为链表赋值不要用头插法,头插法先插入的结点后输出,不用你去逆置,输出的时候就会逆序输出了 遍历输出链表结点不要用移动头指针去遍历,应为头指针有定位链表作用,应该另外设置一个指针去遍历 List item #include<stdio.h> #include<stdlib.h> #define ERROR 0; #define OK 1; typedef int ElemType; typedef int Status; typedef struct LNode{ ElemType data; struct LNode *next; }LNode, LinkList; //创建空链表,由于链表所占用的空间可以不连续,可以不用判断是否分配成功 Status InitLinkList(LinkList &L) { //生成一个新节点作为头结点,头指针指向头结点,头结点指针域置空 L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; return OK; } //给链表各元素赋值,即生成新结点 Status assign(LinkList &L,int n) { int i,e; LinkList u=L; for(i=0;i<n;i++) { //创建一个结点,让s指向它,注意是用尾插法

动手学C语言--数组简单介绍

…衆ロ難τιáo~ 提交于 2020-03-06 16:23:30
数组定义及其要用 特点 一维数组的定义 二维数组的定义及使用 三维数组的定义与应用 字符数组与字符串操作 常用字符串函数 小结 数据类型相同;有序存储(内存指针操作); 特点 数组大小必须是常量,不能是变量; 下标从0-length-1; 一维数组的定义 int age[6]; 在计算机内存中顺序存储; int age[6] ={1,2,3,4,5,6}; 小知识点:static int age[6]; auto int age[6]; 二维数组—类比列表; 三维数组—类比页表;或者类比 长方体 // 将二维数组存放的3*3矩阵,转置存放; // 二维数组存放的矩阵进行转置 # include "stdio.h" # define N 3 void main ( ) { int array [ N ] [ N ] = { { 1 , 2 , 3 } , { 4 , 5 , 6 } , { 7 , 8 , 9 } } ; //打印矩阵 int brray [ N ] [ N ] ; int i , j ; printf ( "the previous array is: \n" ) ; for ( i = 0 ; i < N ; i ++ ) { for ( j = 0 ; j < N ; j ++ ) { printf ( " %-3d " , array [ i ] [ j ]

Codingame The descend_C语言版答案

瘦欲@ 提交于 2020-03-06 16:14:46
爷哭了,一道脑残题,就因为是英文题干,愣是给爷整懵了 服服服,我的锅 #include <stdlib.h> #include <stdio.h> #include <string.h> #include <stdbool.h> /** * The while loop represents the game. * Each iteration represents a turn of the game * where you are given inputs (the heights of the mountains) * and where you have to print an output (the index of the mountain to fire on) * The inputs you are given are automatically updated according to your last actions. **/ int main() { // game loop while (1) { int max_i = 0; int max_h = 0; for (int i = 0; i < 8; i++) { // represents the height of one mountain. int mountain_h; scanf("%d",

C语言多级调度问题

穿精又带淫゛_ 提交于 2020-03-06 13:45:20
C语言多级调度问题,代码简单可以直接运行 #include “stdio.h” #include “math.h” int s[20],m[10][10]; int n,o; void get()//定义输入函数 { printf(“请输入机器个数和作业个数:”); scanf("%d %d",&o,&n); for(int i=0;i<n;i++) scanf("%d",&s[i]); printf(“输入机器个数和作业个数:%d %d\n”,o,n); for(int i=0;i<n;i++) printf("%d “,s[i]); printf(”\n"); } void sort()//排序函数采用基本冒泡排序 { int temp; for(int i=0;i<n;i++) { for(int j=0;j<n-i;j++) { if(s[j]<s[j+1]) { temp=s[j]; s[j]=s[j+1]; s[j+1]=temp; } } } } int min(int a,int b,int c)//比较函数返回最小值 { return (a < b) ? (a < c ? a: c) : (b < c ? b : c); } int max(int a,int b,int c)//比较函数返回最大值 { return (a > b) ? (a > c ? a: c

C语言之getchar()用法

非 Y 不嫁゛ 提交于 2020-03-06 13:42:24
(1)语法 int getchar(void); (2)返回值 getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。 (3)作用 从标准输入流只读取一个字符(包括空格、回车、tab),读到回车符(’\n’)时退出,键盘输入的字符都存到缓冲区内,一旦键入回车,getchar就进入缓冲区读取字符,一次只返回第一个字符作为getchar函数的值,如果有循环或足够多的getchar语句,就会依次读出缓冲区内的所有字符直到’\n’.要理解这一点,之所以你输入的一系列字符被依次读出来,是因为循环的作用使得反复利用getchar在缓冲区里读取字符,而不是getchar可以读取多个字符,事实上getchar每次只能读取一个字符.如果需要取消’\n’的影响,可以用getchar()来清除,如:while((c=getchar())!=’\n’),这里getchar();只是取得了’\n’但是并没有赋给任何字符变量,所以不会有影响,相当于清除了这个字符。 例: 1 #include <stdio.h> 2   int main