• 队列的实现(c语言)


    队列也是线性表,也是分为两种的:1、顺序队列 2、链队列

    顺序队列(c语言实现)

    1. #include
    2. #include
    3. typedef struct {
    4. char *base;
    5. int front;
    6. int erer;
    7. int size;
    8. }SqQueue;
    9. void initSqQueue(SqQueue *queue,int size){
    10. queue->base=(char*)malloc(sizeof(char)*size);
    11. queue->erer=0;
    12. queue->front=0;
    13. queue->size=size;
    14. }
    15. //入队
    16. void enqueue(SqQueue *queue,char value){
    17. if(((queue->erer+1)%queue->size)==queue->front){
    18. printf("队满操作\n");
    19. }else{
    20. queue->base[queue->erer%queue->size]=value;
    21. queue->erer=++queue->erer%queue->size;
    22. }
    23. }
    24. //出队
    25. void dequeue(SqQueue *queue){
    26. if(queue->front!=queue->erer){
    27. printf("%c",(queue->base)[queue->front]);
    28. queue->front=++queue->front%queue->size;
    29. }else{
    30. printf("队空操作!\n");
    31. }
    32. }
    33. int getSize(SqQueue *queue){
    34. return (queue->erer-queue->front+queue->size)%queue->size;
    35. }
    36. int main(){
    37. SqQueue queue;
    38. initSqQueue(&queue,10);
    39. enqueue(&queue,'I');
    40. enqueue(&queue,' ');
    41. enqueue(&queue,'L');
    42. enqueue(&queue,'o');
    43. enqueue(&queue,'v');
    44. printf("%d\n",getSize(&queue));
    45. system("pause");
    46. return 0;
    47. }
    顺序队列的重要操作图解:

    顺序队列(java语言实现)

    1. package linearList;
    2. /*
    3. * 实现一个顺序队列
    4. * */
    5. public class SqQueue {
    6. T h[];
    7. int front;
    8. int tail;
    9. int size;
    10. public SqQueue(int size) {
    11. this.size = size;
    12. this.h=(T[]) new Object[size];
    13. }
    14. //入队
    15. SqQueue enqueue(T value){
    16. if ((tail+1)%size==this.front){
    17. System.out.println("栈满操作");
    18. return null;
    19. }else{
    20. this.h[tail]=value;
    21. tail=(tail+1)%size;
    22. return this;
    23. }
    24. }
    25. //出队
    26. void dequeue(){
    27. if (tail!=front){
    28. System.out.println(h[front]);
    29. front=(front+1)%size;
    30. }else{
    31. System.out.println("空队列操作!");
    32. }
    33. }
    34. int getSize(){
    35. return (tail-front+size)%size;
    36. }
    37. }
    38. class sqlQueueTest{
    39. public static void main(String[] args) {
    40. SqQueue SqQueue = new SqQueue<>(6);
    41. SqQueue.enqueue("sad").enqueue("asda").enqueue("SAda");
    42. SqQueue.dequeue();
    43. SqQueue.dequeue();
    44. // SqQueue.dequeue();
    45. System.out.println(SqQueue.getSize());
    46. }
    47. }

    链队列(c语言实现)

    1. #include
    2. #include
    3. typedef struct lqSqNode {
    4. char value;
    5. struct lqSqNode *next;
    6. }*LinkSQ,lqSqNode;
    7. typedef struct LqQueue {
    8. lqSqNode *front;
    9. lqSqNode *erer;
    10. int size;
    11. }LqQueue;
    12. //初始化链队列
    13. void initLqQueue(LqQueue *queue){
    14. LinkSQ linksq=(LinkSQ)malloc(sizeof(lqSqNode));
    15. linksq->next=NULL;
    16. queue->front=linksq;
    17. queue->erer=linksq;
    18. queue->size=0;
    19. }
    20. //入队
    21. void enqueue(char value,LqQueue *queue){
    22. lqSqNode *node=(lqSqNode*)malloc(sizeof(lqSqNode));
    23. node->value=value;
    24. node->next=NULL;
    25. queue->erer->next=node;
    26. queue->erer=node;
    27. ++queue->size;
    28. }
    29. //出队
    30. void dequeue(LqQueue *queue){
    31. if(queue->front->next!=NULL){
    32. lqSqNode *node=queue->front->next;
    33. // printf("%c\n",node->value);
    34. queue->front->next=node->next;
    35. free(node);
    36. --queue->size;
    37. }else{
    38. printf("队空操作!\n");
    39. }
    40. }
    41. int main(){
    42. LqQueue queue;
    43. initLqQueue(&queue);
    44. enqueue('i',&queue);
    45. enqueue('L',&queue);
    46. enqueue('k',&queue);
    47. enqueue('l',&queue);
    48. // dequeue(&queue);
    49. // dequeue(&queue);
    50. // dequeue(&queue);
    51. // dequeue(&queue);
    52. // dequeue(&queue);
    53. printf("%d\n",queue.size);
    54. system("pause");
    55. return 0;
    56. }
    链队列的重要操作图解:

    链队列(java语言实现)

    1. package linearList;
    2. /*
    3. * 链表队列的实现
    4. * */
    5. class lqSqNode{
    6. T value;
    7. lqSqNode next;
    8. public lqSqNode(T value, lqSqNode next) {
    9. this.value = value;
    10. this.next = next;
    11. }
    12. }
    13. public class LqQueue {
    14. lqSqNode front;
    15. lqSqNode tail;
    16. public LqQueue() {
    17. this.front=null;
    18. this.tail=null;
    19. }
    20. //入队
    21. LqQueue enqueue(T value){
    22. lqSqNode newNode=new lqSqNode(value,null);
    23. if (front==null){
    24. front=newNode;
    25. tail=newNode;
    26. }else{
    27. tail.next=newNode;
    28. tail=newNode;
    29. }
    30. return this;
    31. }
    32. //出队
    33. void dequeue(){
    34. if (front==null){
    35. System.out.println("空队列操作!");
    36. }else{
    37. System.out.println(front.value);
    38. front=front.next;
    39. }
    40. }
    41. }
    42. class LqQueueTest{
    43. public static void main(String[] args) {
    44. LqQueue lqQueue = new LqQueue();
    45. lqQueue.enqueue("asd").enqueue("kkk").enqueue("ppp");
    46. lqQueue.dequeue();
    47. lqQueue.dequeue();
    48. lqQueue.dequeue();
    49. lqQueue.dequeue();
    50. }
    51. }

  • 相关阅读:
    linux 内核漏洞利用 Race Condition
    旅游景区开发小程序有什么好处
    DBC配置SecOC属性
    线程池执行定时任务
    bclinux aarch64 openeuler 20.03 LTS SP1 部署 fastCFS
    ViT论文详解
    NetCore路由的Endpoint模式
    【开源打印组件】vue-plugin-hiprint初体验
    如何平衡新老策略的好与坏,一道常见风控送命题解答
    前端富文本编辑器 vue + tinymce超简单使用方法
  • 原文地址:https://blog.csdn.net/m0_57254953/article/details/133843862