- 博客(30)
- 收藏
- 关注
原创 迪杰斯特拉算法
核心算法:通过三个辅助数组,初始化完成后,循环依次把到各个结点的最短路径进行更新,最终通过D数组完成对最短路径值的记录。迪杰斯特拉算法--最短路径问题。
2023-11-22 20:02:40
116
原创 day8--消息队列
为IPC_NOWAIT时,当消息队列已满的时候,msgsnd函数不等待立即返回。cmd 要执行的操作 IPC_STAT / IPC_SET / IPC_RMID(删除)IPC_NOWAIT:如果没有返回条件的消息调用立即返回,此时错误码为ENOMSG。注意:消息结构必须有long类型的msg_type字段,表示消息的类型。为0时,当消息队列满时,msgsnd将会阻塞,直到消息能写进消息队列。msgtype > 0:收到的第一条msg_type类型的消息。消息长度不包括首类型long。
2023-11-19 22:35:25
46
原创 day6--哈夫曼树
1.从权值集合中选择权值最小的两个结点,构造一棵二叉树,根结点的权值为其左、右子树根结点权值之和。2.删除这两个结点,将新生成的根结点加入到权值集合中。3.重复以上步骤,直到权值集合中只剩下一个结点为止。
2023-11-18 15:23:06
55
原创 day7进程间通讯--信号机制
0:发送信号给跟调用kill函数的那个进程处于同一进程组的进程。< -1: 取绝对值,发送信号给该绝对值所对应的进程组的所有组员。= -1:发送信号给,有权限发送的所有进程。概念:信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式。该信号在用户终端关闭时产生,通常是发给和该。该信号在一个进程企图执行一条非法指令时产生。该信号在非法访问内存时产生,如野指针、缓。该信号用来结束进程,并且不能被捕捉和忽略。该信号用于暂停进程,并且不能被捕捉和忽略。该信号用于暂停进程,用户可键入。
2023-11-15 22:51:51
393
原创 day5--图的创建与DFS和BFS遍历
BFS利用数据结构队列(queue)实现,空间复杂度为O(2^n),另外BFS可以用来解决最短路问题。DFS使用数据结构栈(stack)或递归实现,其空间复杂度为O(n)
2023-11-12 22:07:04
140
原创 day5.
gets(s);for(i=len;i>=0;break;bool cmp(int x,int y){ //自己定义的排序方法,使用起来更灵活return x<y;int i;for(i=0;i<10;i++)//排序for(i=0;i<10;
2023-11-02 21:50:33
65
1
原创 day6--进程间的通信
失败:-1,设置errno。套接字(socket)--主流的一个通信方式,后续网络专栏会详细介绍。概念:进程间通信就是进程和进程之间交换信息。消息队列(message queue)信号灯集(semaphore set)共享内存(share memory)有名管道 (fifo)无名管道(pipe)信号(signal)共享内存(mmap)过时的IPC通信方式。
2023-10-30 22:20:58
186
1
原创 day5--条件变量&&线程池
所以pthread_cond_wait 和 pthread_mutex_lock 必须配对使用。//第一个参数是初始化的条件变量,第二个参数是初始化的互斥量。动态初始化互斥量:pthread_cond_init(&cond);如果有资源,就pthread_mutex_lock。休眠,等资源到了,再。
2023-10-23 21:59:41
121
原创 day4--线程的取消与互斥锁
/随时杀死一个线程注:线程的取消要有取消点才可以,不是说取消就取消,线程的取消点主要是阻塞的系统调用,例如sleep();如果没有取消点,手动设置一个设置取消允许或禁止//第二个参数通常为NULLPTHREAD_CANCEL_ENABLE //可以被取消PTHREAD_CANCEL_DISABLE //不能被取消设置取消类型//第二个参数通常为NULL。
2023-10-21 23:57:21
104
1
原创 day3--线程的创建与回收
/线程的退出,可以达到清理线程的作用,建议使用它退出线程,不建议使用return 退出线程。//放在线程函数开始处即可,获取线程ID后,等待线程结束并该回收线程。概念:Linux内核没有线程,线程是pthread库提供的,同一进程中的线程共享相同的地址空间。注:pthread_join 是阻塞函数,如果回收的线程没有结束,则主函数一直等待。2、简单的方式:会有警告,但是可以运行,需要程序员保证长度不丢失。attr 线程属性,NULL代表默认属性。1. 主进程的退出,它创建的线程也会退出。
2023-10-19 23:43:16
135
原创 day2--exec函数族+守护进程+GDB调试多进程
创建进程之后,子进程和父进程执行相同的代码,但是在实际开发当中,我们希望父子进程执行不同的代码。进程当前被括号内指定的程序替代,但是进程号不变。注:exec函数最后都是NULL空指针作为结束。
2023-10-16 21:03:27
188
1
原创 day1--进程的创建与回收
/父进程返回子进程的ID号,子进程返回0。若父进程先结束,子进程成为孤儿进程,被init进程收养,子进程变成后台进程。程序:存放在磁盘上的指令和数据的有序集合(静态的),包括BSS、DS,CS段。若子进程先结束,父进程如果没有及时回收,子进程变成僵尸进程。进程类型:交互进程(前台)、批处理进程(作业对列)、守护进程(后台)进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;成功时父进程返回子进程的进程号,子进程返回0。进程控制块(pcb):PID, 进程优先级,文件描述符表。
2023-10-15 23:03:13
65
1
原创 字符串暴力匹配算法
void matching_string(String* s1,String* s2) {//核心算法。while (i < s1->lenght && j < s2->lenght) {//易错点。void Add_string(String* s, char* data) {//给字符串添加内容。if (s->data) //如果字符串中有数据就释放掉。if (j==s2->lenght)//易错点。
2023-10-15 09:54:32
48
1
原创 day2--非递归遍历二叉树(利用链式栈实现)
if(top->rchild && top->rchild->flag==0){//判断是否有右子树和是否被访问过。//让flag置1--表示当前右子树已被访问。
2023-10-15 09:46:32
145
1
原创 day1--树的层次遍历(利用双循环链表队列实现)
/3、Q->pre就是最后一个结点,然后再指向next,就是最后一个结点和新结点的连接。//3、让第一个结点的next指向最后一个结点。if (temp->Data->lchild) { //此结点的左子树如果不为空就入队。if (temp->Data->rchild) { //此结点的右子树如果不为空就入队。//1、新结点的pre指向最后一个结点。Q->next=Q;
2023-10-14 22:19:34
230
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人