简述网站建设的过程,宁夏做网站的,想自己做网站推广,迁安网站建设1.题目的初步分析 我们分析上述题目的时候会发现题目非常的长#xff0c;不好整理思路#xff0c;我这里可以大致的将本题的几个核心点说出来#xff1a; 1.队列的思路 循环队列说来说去不还是队列嘛#xff0c;那么队列的基本操作增删查改、以及队列的基本结构肯定都是不能… 1.题目的初步分析 我们分析上述题目的时候会发现题目非常的长不好整理思路我这里可以大致的将本题的几个核心点说出来 1.队列的思路 循环队列说来说去不还是队列嘛那么队列的基本操作增删查改、以及队列的基本结构肯定都是不能变的我们知道队列的逻辑结构就是先进先出而在C语言中我们要实现队列可以采用两种方法一种是链表一种是顺序表本题我们采用顺序表。 2.循环的实现 本题我们既然采用顺序表的结构来实现这个循环队列那么我们就必须想一种方法来让它实现逻辑上的循环这里可以提供一个思路多开辟一块空间队头指针指向队列首元素队尾指针指向队尾元素的下一个空间 比如上诉图假设题目要求k为3那么我们就开四块空间为什么我们一定要多开一个空间呢这是为了我们应对队列里只有0个元素或满元素的时候倘若我们rear指向的是最后一个元素那么我们0个元素和满元素就没有办法判断了因为这两种情况front都等于n。 2.具体实现 2.1结构体里的结构 arr里面就是我们的元素了k代表有k个元素front就是首元素的下标rear就是尾元素的下一个空间的下标。 2.2创建结构体 创建的步骤顺序表类似注意这里要返回一个结构体类型类型的指针所以我们就创建一个结构体指针的变量创建完后就该给结构体里的arr数组开辟空间了注意我们这里是开辟k1个空间。然后就是把k赋值给结构体里的k把front和rear都初始化为0再返回这个指针变量就可以了。 2.3判空 注意原本题目中的判空是在下面的位置但我们把它提到前面来是因为在实现其它接口的时候判空和判满能给我们很大的帮助所以我们待会也要把判满的接口提到上面来。 判空的实现非常简单只需要判断rear和front是否相等就可以了因为rear指向的是尾元素的下一个所以逻辑上如果满的话rear会呆在尾元素和头元素之间的空空间上这也就说明了只有0个元素这种情况会使front等于rear。 2.4判满 为什么要这样来判满呢因为逻辑上来说既然是一个循环那么满元素的时候rear就会在front的前面一个但物理结构上我们实现的方式就是% 比如说这种情况k为3rear也是33%300front这样就达到判满的效果那么为什么我们要加1呢这是因为倘若我们的rear为0那么0%任何数都是0为了避免这种情况我们才在两边都加上1。 2.5插入 插入操作我们先判满如果队列满了我们就返回假如果队列不为满我们就赋值赋完之后我们就给rear加上1因为我们rear指向的是尾元素的下一个但是不要忘记了rear可能会超出范围所以我们可以取余倘若这一次加1操作超出了范围我们就%k1还是上面那幅图倘若rear为四k1也为4因为下标本来就比元素个数少1嘛所以这样操作之后我们就让rear重新回到了0的位置也就构成了物理意义上的循环然后我们还要返回真。 注意接口是有独立性的我们只有知道在一个接口里我们需要针对什么我们的思路才不容易混比如本接口我们增加元素针对的是rear这个元素就要考虑rear的情景不需要考虑front的只需要做好本职工作就行。 2.6删除 删除我们得先判空如果为空就没必要删直接返回假如果有元素那么我们直接让front就行了注意我们之前说过了这是一个队列那么我们的性质肯定要跟队列一样出队列就是从队首出嘛front之后不要忘记front也可能会出界所以我们同样进行取余操作这个操作在上一个接口已经讲过了我们这里就不再赘述了删除成功返回真就可以了。 2.7获取队首元素 这个操作就非常简单还是先判空如果没有元素直接返回-1如果有元素就返回下标为front的元素就可以了。 2.8获取队尾元素 这个也是一样的还是先判空如果没有元素直接返回-1如果有元素就返回下标为rear的元素就可以了。 2.9循环队列的销毁 销毁操作我们直接把所有开辟的空间释放掉所有值初始化就行了。 那么本题我们就解决了。