「队列-顺序结构(循环队列)」C语言实现

循环队列示意图

结构定义

1
2
3
4
5
6
7
8
9
10
11
12
13
/*-------------------- 循环队列结构定义 ----------------------*/

#define MAXSIZE 10 // 队列长度

typedef int ElemType;

typedef struct queue {
ElemType * pBase; // 数组(用指针表示)
int front;
int rear;
} Queue, *pQueue;

/*-------------------- 循环队列结构定义 ----------------------*/

重点

  1. 为什么要使用循环队列?

    如果用链表实现队列的话,很简单,只要确定一个头指针和一个尾指针即可。

    但这里我们选择用数组来实现,数组占用一块连续的内存地址,那么就要考虑内存的问题了,入队:尾指针递增,出队:头指针递增。

    可以看出不管是增加元素还是删除元素,指针所指的内存地址都在递增,那么前面的地址就浪费了,内存空间一直在变小。

    为了解决这个问题,循环队列应运而生。

  2. 实现循环队列的关键点:

    • 头指针 front: 指向第一个有效节点,尾指针 rear: 指向最后一个有效节点的后面一个节点
    • 队列长度:len, 有效节点数:len-1
    • 入队:rear = (rear + 1) % len;
    • 出队:front = (fromt + 1) % len;
    • 队空:front == rear
    • 队满:(rear + 1) % len == front
  3. 队列的应用:所有与时间有关的操作都会用到队列。

More

GitHub 访问不了?

GitHub 是全球最大的代码开源平台,小伙伴们平时都喜欢在那里找一些优质的开源项目来学习,以提升自己的编程技能。

但最近,由于某些特殊原因,越来越多小伙伴抱怨自己突然无法访问 GitHub 了,时好时坏。某位大佬给出的解释是:

图片

这无疑是在我们学习编程的路上驻了一堵高墙!这怎么能忍?

More

知识点归档记录

os.system() 和 os.popen()

简介:

os.system 调用系统命令,完成后退出,返回结果是命令执行状态,一般是 0。

os.popen 可以实现一个「管道」,从这个命令获取的值可以在 python 中继续被使用。

用法:

1
os.system('cat /proc/cpuinfo')
1
2
3
4
output = os.popen('cat /proc/cpuinfo')
print output.read()

# 通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出

参考:

https://www.cnblogs.com/jefree/p/4461979.html

More

「栈-顺序结构」C语言实现

顺序栈示意图

待补充。。。

数据结构定义

1
2
3
4
5
6
7
8
9
10
11
12
13
/*------------------- 顺序栈结构定义 ----------------------*/

#define MAXSIZE 100

typedef int ElemType;

// 顺序栈的类型定义
typedef struct {
ElemType * pBase; // 数组基地址
int top; // 栈顶指针,起初为 -1
} SqStack, *pSqStack;

/*------------------- 顺序栈结构定义 ----------------------*/

More

《计算机网络》第一章:概述

《计算机网络》笔记是根据这个课程整理的:湖大教书匠-计算机网络微课堂
笔记内容主要参考:BloothOfYouth kagangtuya-star MurphyChen’s Notes

图示说明

image-20201007143815954代表着主机

image-20201007144130208 代表服务器

image-20201007143904153 代表着路由器

image-20201007143936128代表着网络

1.1、计算机网络在信息时代的作用

  • 计算机网络已由一种通信基础设施发展成为一种重要的信息服务基础设施
  • 计算机网络已经像水,电,煤气这些基础设施一样,成为我们生活中不可或缺的一部分

More

「栈-链式结构」C语言实现

链式栈示意图

数据结构定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*--------------------------- 链式栈结构定义 ---------------------------*/

typedef int ElemType;

// 定义节点的数据类型
typedef struct node {
ElemType data;
struct node * pNext;
} Node, *pNode;

// 定义栈的数据类型
typedef struct linkstack {
pNode pTop; // 栈顶指针,指向栈顶元素
pNode pBottom; // 栈底指针,保持不动,指向头节点(无效数据)
} LinkStack, *pLinkStack;

/*--------------------------- 链式栈结构定义 ---------------------------*/

More

「线性表-链式结构(单链表)」C语言实现

单链表示意图

  • 首节点:第一个有效节点
  • 头节点:首节点前面的那个节点;不存放有效数据;目的是为了方便对首节点的操作,保持链表操作的一致性;
  • 尾节点:最后一个节点
  • 尾指针:指向最后一个节点的变量
  • 头指针:指向头节点的变量,知道了头指针就确定了一个链表;

数据结构定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*------------------------------ 单链表结构定义 -----------------------------*/

typedef int ElemType;

// 定义链表中节点的数据类型
typedef struct node {
ElemType data;
struct node * pNext;
} Node, *pNode;

typedef pNode LinkList; // 有了头指针,就有了整个链表,即头指针代表一个链表

// 链表图示:https://img.arctee.cn/one/202209162309895.png

/*------------------------------ 单链表结构定义 -----------------------------*/

重点

  1. 链表的插入和删除操作,关键处我在后文做了详解;
  2. free(p): 删除 p 所指向的变量所占内存(堆内存),而不是删除 p 本身所占内存(栈内存)。所以除了 free(p),还要加一句 p = NULL,否则 p 会变成野指针。

More