自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 exec函数族和wait函数解决僵尸进程

【案例 1】若子进程p1​是其父进程p的先决进程,基于wait函数使得进程同步。 #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> int main(){ pid_t tempPid, tempW; tempPid = fork(); if(tempPid == -1){ perror("fork error"); exit(1); }else if(tempPid == 0){//c

2022-05-11 19:44:09 846

原创 Linux进程管理-创建进程与进程回收

两个函数 创建进程:fork() 暂缓进程执行:sleep() 1.fork()函数 1.使用方法: #include <unistd.h> pid_t fork(void); 2.函数功能: 函数执行后,系统会创建一个与原进程几乎相同的进程,之后父子进程都继续执行。子进程创建成功后,原程序会被复制,就有了两个fork函数。若子进程创建失败,原程序不会复制。 3.返回值: 成功:返回两个值: 父进程的fork函数会返回子进程的pid, 子进程的fork函数会返回0。 不成功:只有父进程的f

2022-05-06 12:12:59 1215

原创 Linux文件系统与操作

文件读写操作部分相关函数 1.open() 2.read() 3.write() 4.lseek() 5.close() 1.open() 打开或创建一个文件,存在于系统函数库fcntl.h中 函数声明: int open(const char *pathname,int flags[,mode_t mode]); 参数分析: pathname:文件路径 flag:访问模式,常用的宏见下表: mode:设置新文件权限(只有第二个参数flag=O_CREAT)才会起作用,部分权限: 返回值: 调用成功

2022-05-03 12:41:56 251

原创 数据结构:树的中序查找

找中序查找的下一个结点 先回忆一下: void Inorder(Node* root) { if (root == NULL) return; else { Inorder(root->left); printf("%d", root ->data); Inorder(root->right); } }

2021-09-20 17:28:30 161

原创 数据结构:二叉搜索树

删除二叉搜索树中的一个结点 有3种情况: 该结点 1.没有儿子 2.有一个儿子 3.有两个儿子 前两种比较简单,第三种可以选择左子树的最大结点或者右子树的最小结点来顶替该结点,占据该结点位置。 我们本着先找到待删除结点,再分情况讨论的原则。 struct Node* Delete(Node* root, int data) { if (root == NULL) return root; else if (root->data > data) root->left = Dele

2021-09-20 16:31:45 89

原创 数据结构:检查一个二叉树是否是二叉搜索树

二叉搜索树 判断是否左子树都小于根节点都小于右子树 判断当前三个结点大小,递归 bool IsSubtreeLesser(Node* root, int value) { if(root==NULL) return true; if (root->data <= value) return true; return false; } bool IsSubtreeGreater(Node* root, int value) { if(root==NULL) return true;

2021-09-20 16:11:05 281

原创 数据结构:先序遍历等

先序遍历 void Preorder(Node* root) { if (!root) { return; } printf("%d", root->data); Preorder(root->left); Preorder(root->right); }

2021-09-20 15:51:30 106

原创 数据结构:二叉树高度

二叉树高度 struct Node { int data; Node* left; Node* right; }; int max(int a, int b) { return a > b ? a : b; } struct Node* root; int FindHeight(struct Node* root) { if (!root) { return -1; } return max(FindHeight(root->left), FindHeight(root-&gt

2021-09-20 15:48:56 192

原创 数据结构:闲敲棋子落灯花之链表逆序输出Reverse

链表逆序输出 首先,我们需要了解,逆序输出不是把数据对应位置改变,而是仅仅改变链接顺序。 方法一:迭代链表。使用循环,遍历链表,每一步,反转一个链接。 方法二:递归。 方法一: 过程:先使第一个结点指向NULL,需要注意,如果已经断开链接,如何查找到下一个链接,最后再用head指向。 在变量中跟踪前一个结点 我们需要反转当前指针,指向它的前一个结点,,所以要在变量中跟踪前一个结点,同时还要记录下一步的位置(遍历链表)。 struct Node* Reverse() { struct Node* curre

2021-09-16 15:40:42 903

原创 数据结构:闲敲棋子落灯花之删除结点

删除结点 1.修复链接 2.释放空间

2021-09-16 15:03:05 352

原创 数据结构:闲敲棋子落灯花之链表任意位置插入

链表任意位置插入 鉴于之前已经写过结构体主函数,这次主要分析一下Insert函数。 void Insert(int data, int n) { Node* temp1 = (Node*)malloc(sizeof(Node)); temp1->data = data; temp1->next = NULL; if (n == 1) { temp1->next = head; head = temp1; return; } Node* temp2 = head;

2021-09-15 23:09:50 153

原创 数据结构:闲敲棋子落灯花之链表头插法

1.链表头插法 #include<stdio.h> #include<stdlib.h> struct Node { int data; struct Node* next; }; struct Node* head; void Insert(int x) { Node* temp = (Node*)malloc(sizeof(struct Node)); temp->data = x;//(*temp).data=x; temp->next = head;

2021-09-15 22:36:47 106

空空如也

空空如也

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

TA关注的人

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