C语言学习笔记
索半斤_suobanjin
郑州轻工业大学在读硕士研究生 | 啥也不会的小fw
展开
-
兰州理工大学数据结构算法设计考研样题
1、一组整数以顺序结构存储,设计将所有偶数元素移到所有奇数元素之前的算法//顺序表结构typedef struct list{ int data[MAXSIZE]; int len = 0;}*SList;//算法实现void sortNumber(SList &list){ int data[MAXSIZE]; int i = 0; int j = list->len-1; for(int k=0;k<list->len;k++){ if(list-&原创 2021-09-28 17:23:16 · 945 阅读 · 0 评论 -
C语言实现学生管理系统(新版)
一、前言时光匆匆,当年在实验室苦逼的敲代码的小学弟已经成了现在的大四老学长o(╥﹏╥)o,经过四年的洗礼,依然是个菜鸡。不过技术还是有所精进,最近考研复习数据结构又翻到了这个大一时候写的项目,然后发现有点小bug当时没有解决,于是强迫症又犯了,决定给它修好。现在针对第一版修复了以下功能:1、增强了系统的安全性2、修复了文件读取的错误3、将冒泡排序修改为快速排序如有问题可以在评论区反馈,有时间我会在修改。后续可能也会尝试使用其它数据结构来重构系统或者使用java来重写项目。二、代码实现#incl原创 2021-09-15 22:11:12 · 489 阅读 · 0 评论 -
完美二叉树填充每个节点的下一个右侧指针
一、问题描述今天在北航考研群看到老哥发了一道二叉树的题,感觉挺有意思的,就做了做,题目如下:二、思路分析思路需要结合代码来看三、代码实现typedef struct Node{ int val; struct Node *left; struct Node *right; struct Node *next; }*trees;void linkTree(trees tree){ int top = 0,rear = 0; //初始化队列 int maxSize = 50;原创 2021-09-15 16:43:06 · 159 阅读 · 1 评论 -
leetcode简单题(一) —— 镜像二叉树
一、问题描述二、代码实现typedef struct Tree{ int data; struct Tree *left = NULL; struct Tree *right = NULL; }*BTree;BTree mirro(BTree root){ if(root == NULL){ return NULL; } BTree left = mirro(root->left); BTree right = mirro(root->right); root-&原创 2021-08-26 20:37:07 · 78 阅读 · 0 评论 -
数据结构考研真题(四)—— 删除单链表中绝对值相同的结点
一、问题描述二、思路分析这个问题,首先很容易想到要双重遍历,但是时间复杂度会比较高。那么我们可以考虑使用数组计数,这样就可以遍历一遍,这也算是一个比较好用的套路。三、代码实现3.1 第一种解法void deleteDul(Link &link){ Link cur = link->next; while(cur != NULL){ Link next = cur; while(next != NULL && next->next != NULL){原创 2021-08-23 19:35:44 · 495 阅读 · 0 评论 -
数据结构考研真题(三)——二叉树所有叶结点的带权路径长度之和
一、问题描述二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉树T,采用二叉链表存储,结点结构为:其中叶结点的weight域保存该结点的非负权值。设root为指向T 的根结点的指针,请设计求T的WPL 的算法,要求:1) 给出算法的基本设计思想;2) 使用C 或C++语言,给出二叉树结点的数据类型定义;3) 根据设计思想,采用C 或C++语言描述算法,关键之处给出注释。二、思路分析可以使用先序遍历也可以使用层次遍历,层次遍历还没看三、代码实现结构体定义原创 2021-08-23 10:55:37 · 1257 阅读 · 0 评论 -
数据结构天勤练习题(六)—— 合并两个递增数组
一、问题描述合并两个升序数组a,b到数组c中。二、思路分析1、第一种就是双重遍历,事件复杂度O(M*N)2、第二种先合并两个数组然后使用快排,时间复杂度为O(n+nlogn)3、第三种比较巧妙,主要讲一下第三种是如何做的设置a数组末端索引为i,b数组末端索引为j,设置c数组为c[countIndex]同时从后往前遍历数组元素如果b[j]>a[i]则,count[countIndex] = b[j],j–如果b[j]<=a[i]则,count[countIndex] = a[i原创 2021-08-21 08:37:43 · 470 阅读 · 0 评论 -
数据结构考研真题(二)—— 数组循环左移
一、问题描述二、思路分析根据这几天做题,我发现考研题难度确实大,而且这尼玛题目总是搞得让你看不懂,总体来说思路不是很好想。那么这种情况下该如何准备代码题呢?我认为还是得多练,多见,见得多了也就有点思路了。像链表或者顺序表的代码题,很多可以用双指针来解决,之所以能想到双指针是因为两个指针可以在O(n)时间复杂度下对顺序表遍历两次而无需使用双重循环。回归到本题,也是使用了双指针,但是题目首先不太容易看懂,其次就是思路也确实不太好想,这只能靠多刷题来总结了。三、代码实现#include<stdi原创 2021-08-20 17:34:56 · 348 阅读 · 0 评论 -
数据结构天勤练习题(五)—— 删除递增单链表中的重复元素
一、问题描述删除递增单链表中的重复数据。二、思路分析设置两个指针(pre、cur),初始化指向第一个数据结点。cur指针用来遍历链表,如果pre指向结点的值和cur指向结点的值相等则删除cur指向的结点,pre依然指向当前结点,否则pre指向下一结点。三、代码实现#include<stdio.h>typedef struct Node{ int data; struct Node *next;}*Link; void initLink(Link &link){原创 2021-08-19 19:48:01 · 315 阅读 · 0 评论 -
数据结构天勤练习题(四)—— 将顺序表逆置
一、问题描述设计一个算法,将顺序表中所有元素逆置二、基本思路双指针即可解决问题,begin指针指向开头,end指向结尾,然后begin向前后动,end向前移动,当begin == end 或者begin+1 = end时即完成了逆置过程。三、代码实现#include<stdio.h>void reverse(int a[],int n){ int begin = 0; int end = n-1; while(begin != end){ int temp = a[begi原创 2021-08-19 17:11:11 · 528 阅读 · 0 评论 -
数据结构天勤练习题(三)—— 删除单链表中的最小值结点
一、问题描述设计一个算法删除单链表L(有头结点)中的一个最小值结点。二、思路分析设置三个结点,一个用来指向最小值结点的前一个结点(pre),一个指向最小值结点(min),一个用来遍历结点(temp),当遍历结点遇到比最小值结点小的结点时,使最小值结点指向遍历结点,同时使用pre结点遍历链表,直到pre->next的值为min。三、代码实现#include<stdio.h>typedef struct Node{ int data; struct Node *next;}*原创 2021-08-19 16:41:58 · 676 阅读 · 0 评论 -
数据结构天勤练习题(二)—— 计算去除最大公共前缀后两个子表的大小
一、问题描述二、思路分析1、先查找出两个数组中较短的一位的长度2、同时遍历数组查看到第几位两者是相同的(即查找最大公共前缀),这里可以使用一个变量count来计数,count的数量即为最大公共前缀3、判断m、n和count的关系,计算A和B的大小三、代码实现#include<stdio.h>//m为a数组长度,n为b数组长度 int compare(float a[],float b[],int m,int n){ //查找两个数组中较短的长度 int k = n>原创 2021-08-19 15:18:54 · 166 阅读 · 0 评论 -
数据结构天勤练习题(一)—— 建立没有重复元素的单链表
一、问题描述建立一个单链表,并要求字母不重复地存入链表。二、思路分析思路很简单,在添加元素的时候判断前面的结点是否已经存在该值,如果存在则直接跳过即可。三、代码实现#include<stdio.h>typedef struct Node{ char data; struct Node *next;}Node,*Link;void initLink(Link &link){ link = new Node; link->next = NULL;}void原创 2021-08-19 10:56:12 · 471 阅读 · 0 评论 -
数据结构考研真题 (一)—— 查找单链表倒数第k个结点的值
前言本人考本校,不考408(学校比较一般,考408指定是没人来了),但是使用的复习资料是天勤的,本题是天勤书本上的一道408数据结构真题。一、问题描述对于一个带有头结点的单向链表,在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点。二、思路分析使用快慢指针即可解答此题(另一种思路是两次循环,第一次得到链表长度,第二次得到结果)。三、代码实现#include<stdio.h>typedef struct Node{ int data; stru原创 2021-08-18 22:16:08 · 987 阅读 · 2 评论 -
C/C++语言实现数据结构系列(十三)—— 单链表反转
//传入的单链表为带头节点的单链表,返回的也是带头节点的单链表 void reversion(LinkedList &L,LinkedList &head){ LinkedList next = NULL; LinkedList pre = NULL; LinkedList cur = L; int i = 1; //第一个节点在传入的链表中为虚拟头节点,需要特殊处理 while(cur != NULL){ next = cur->next; cur->n原创 2021-08-17 18:12:48 · 82 阅读 · 0 评论 -
C/C++语言实现数据结构系列(十二)—— 选择排序
#include<stdio.h>//交换最小值和当前最小值 void exch(int array[],int a,int b){ int temp = array[a]; array[a] = array[b]; array[b] = temp;}//选择排序 void selectSort(int array[],int len){ for(int i=0;i<len;i++){ int min = i; for(int j=i+1;j<len;j++原创 2021-08-17 16:28:26 · 58 阅读 · 0 评论 -
C/C++语言实现全排列问题
#include<bits/stdc++.h> void swap(int &x,int &y){ int temp = x; x = y; y = temp;}//全排列问题int count = 0; void dfs(int array[],int k,int m){ if(k == m){ for(int i=0;i<=m;i++){ printf("%d\t",array[i]); } printf("\n"); coun原创 2021-08-17 14:31:54 · 126 阅读 · 0 评论 -
C/C++语言实现数据结构系列(十一)—— 快速排序
#include<stdio.h>//快速排序 void quicksort(int array[],int left,int right){ if(left > right){ return; } int temp = array[left]; int i = left; int j = right; int t; while(i != j){ while(array[j]>=temp && i<j){ j--; }原创 2021-08-16 22:10:14 · 106 阅读 · 0 评论 -
C/C++语言实现数据结构系列(十)—— 冒泡法排序
#include<stdio.h>int main(){ int array[5]; for(int i=0;i<5;i++){ scanf("%d",&array[i]); } //冒泡排序 for(int i=1;i<=4;i++){ for(int j=0;j<5-i;j++){ if(array[j] > array[j+1]){ int a = array[j]; array[j] = array[j+1];原创 2021-08-16 20:28:40 · 106 阅读 · 0 评论 -
C/C++语言实现数据结构系列(九)——中序遍历对二叉树线索化
//中序遍历对二叉树线索化 Status inThread(BiTree tree,BiTree &pre){ if(tree == NULL){ return ERROR; } inThread(tree->left,pre); if(tree->left == NULL){ tree->left = pre; tree->ltag = 1; } if(pre != NULL&&pre->right == NULL){ p原创 2021-08-16 17:16:15 · 102 阅读 · 0 评论 -
C/C++语言实现数据结构系列(八)——双链表实现
#include<stdio.h>#define ERROR 0#define Status int#define SUCCESS 1 typedef struct Node{ int data; struct Node* next; struct Node* pro;}*DLinkedList;void initListNode(DLinkedList &list){ list = new Node; list->next = NULL; list-&g原创 2021-08-13 13:30:01 · 90 阅读 · 0 评论 -
C/C++语言实现数据结构系列(七)——单链表实现
#include<stdio.h>#include<stdlib.h>#define OK true#define ERROR false#define Status bool#define OVERFLOW -2 typedef struct student{ char name[20]; int age;}student;typedef struct LNode{ student data; LNode *next;}LNode,*LinkedList;原创 2021-08-13 13:28:44 · 69 阅读 · 0 评论 -
C/C++语言实现数据结构系列(一)——二叉树及二叉树的基本操作(先序、中序、后序、构造)
#include<stdio.h>#include<math.h>#include<stdlib.h>#include<algorithm>#define Status int#define ERROR -1#define OK 1#define FALSE 0#define MAXSIZE 30using namespace std;typedef struct Tree{ int data; struct Tree* left;原创 2021-08-11 17:05:48 · 122 阅读 · 0 评论 -
C/C++语言实现数据结构系列(二)——单链表实现栈
#include<stdio.h>#define ERROR 0#define Status int#define SUCCESS 1 typedef struct Node{ Node* next; int data;}*Stack; void initStack(Stack &stack){ stack->next = NULL;}Status isEmpty(Stack stack){ if(stack->next == NULL){原创 2021-08-07 09:57:34 · 121 阅读 · 0 评论 -
C/C++语言实现数据结构系列(三)——顺序表实现栈
#include<stdio.h>#define MAXSIZE 8#define ERROR 0#define Status int#define SUCCESS 1 //栈结构体表示typedef struct stack{ int data[MAXSIZE]; int top;}*Stack;//初始化栈void initStack(Stack &stack){ stack->top = -1;}//判断是否为空Status isEmpt原创 2021-08-07 08:46:51 · 91 阅读 · 0 评论 -
C/C++语言实现数据结构系列(四)——链表实现队列
#include<stdio.h>#define ERROR 0#define Status int#define SUCESS 1typedef struct Node{ int data; Node *next;}*QueueNode;typedef struct QNode{ QueueNode front; QueueNode rear;}*Queue;void initQueue(Queue &queue){ queue->front = N原创 2021-08-06 15:59:11 · 106 阅读 · 0 评论 -
C/C++语言实现数据结构系列(五)——顺序表实现队列
#include<stdio.h>#define MAXSIZE 8#define ERROR 0#define Status int#define SUCESS 1typedef struct Node{ int front,rear; int data[MAXSIZE];}*Queue;void InitQueue(Queue &queue){ queue->front = 0; queue->rear = 0;} Status isEmp原创 2021-08-06 09:37:58 · 109 阅读 · 0 评论 -
C/C++语言实现数据结构系列(六)——顺序表实现
#include<stdio.h>#include<stdlib.h>#define MAXSIZE 100#define OK true#define ERROR false#define Status bool#define OVERFLOW -2 typedef struct{ char name[20]; int count;}Book;typedef struct{ Book *elem; int length; }SqList;//顺序表初原创 2021-07-16 19:53:46 · 88 阅读 · 0 评论 -
C语言实现简单的学生管理系统
C语言实现简单的学生管理系统作者:人工BUG工程师大一上学期用C语言写的学生管理系统,写的比较粗糙,但是基本的功能都实现了,发出来供有需要的同学参考。预备知识结构体以及结构体数组的使用清屏函数C语言的基本语法C语言的基本函数库的使用冒泡法排序删除、插入、添加算法的实现功能的模块化实现代码实现#include<stdio.h> ...原创 2019-12-09 18:22:09 · 5154 阅读 · 3 评论