[笔记]指针与队列

与堆很相像的是队列(queue),但它是一种先进先出(first in last out)的表示方式,我们可以将队列视为一种添加在后端,而删除在前端的链表,我们用一段简单的代码来表示:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void Insert();
void Delete();
void Dispaly();
void Quit();

struct student 
{
    int id;
    int score;
    struct student* next;
}; 

typedef struct student ST;

ST* p, * head, * s, * s1;
int main()
{
    head = (ST*)malloc(sizeof(ST));
    head->next = NULL;
    char a;
    while (1)
    {
        printf("请输入:1.增加,2.删除,3.遍历,4.退出\n");
        a = getch();
        switch (a)
        {
        case'1':
            Insert();
            break;
        case'2':
            Delete();
            break;
        case'3':
            Dispaly();
            break;
        case'4':
            Quit();
            break;
        }


    }


    return 0;


}
void Insert()
{
    p = (ST*)malloc(sizeof(ST));
    printf("\n请输入ID:");
    scanf("%d", &p->id);
    printf("\n请输入分数:");
    scanf("%d", &p->score);
    s1 = head;
    s = head->next;
    while (s != NULL)
    {
        s1 = s;
        s = s->next;
    }
    s1->next = p;
    p->next = s;
    
    printf("\n添加成功\n\n");
}
void Delete()
{
    char x;
    s1 = head;
    s = head->next;

    if (head->next == NULL)
    {
        printf("\n无数据\n\n");
    }
    else
    {
        printf("\n确定删除:Y/y");
        x = getch();
        if (x == 'Y' || x == 'y')
        {
            s1->next = s->next;
            free(s);
            printf("\n删除成功\n");
        }
    }
}
void Dispaly()
{
    
    if (head->next == NULL)
    {
        printf("\n无数据\n\n");
    }
    else
    {
        s = head->next;
        while (s != NULL)
        {
            printf("\nid是:%d\t学分是:%d\n", s->id, s->score);
            s = s->next;
        }
    }

}
void Quit()
{
    exit(0);
}

在上一文的栈实现代码中,我添加了一个指针s1,用它控制头节点,当然也可以不添加,只是习惯问题罢了

如上文所述,与栈不同的是,栈是先进先出,添加和删除都在前端,而队列是添加在尾端,而删除在前端。

那么我们只需要修改添加的函数即可,先利用一个while循环使他走向尾端,当尾端后为NULL的时候,使尾端节点的指针域指向新结点即可

img

s1用于管理头结点,s用于管理后置节点

当后边没数据的时候,直接将头节点的指针域链接新结点,然后将新节点的指针域指向NULL(代码中指向了头节点的指针域)

添加和删除跟栈操作相同,其实在我们接触单双链的时候,就已经清楚的明白了链表的运作方式,和各项基本操作

在这里就不多废话了,在以后学习数据结构中,对于链式结构会有一个新的认识,到这里只是简单的接触罢了。

本文链接:

https://nullcode.fun/116.html
1 + 9 =
快来做第一个评论的人吧~