销毁队列的代码是啥意思?解释下

销毁队列的代码是啥意思?解释下,第1张

typedef struct QNode{

QElemType data

struct QNode *next//next为指向队列中下一结点的拿山雀指针

}QNode,*QueuePtr

typedef struct{

QueuePtr front,rear//front&rear are pointers refer to the front and the rear of the queue.

}LinkQueue//将结构体struct定义为LinkQueue,更符合人类语言理解。

Status Destroyqueue(LinkQueue &Q) {

//队列Q存在则销毁唯扰Q

while(Q.front){//Q.front是队列的队首节点,不为NULL时执行循环

Q.rear=Q.front->next//Q.rear指向离队首最近的节点。

free(Q.front)释放队首的节点所在内存单元

Q.front=Q.rear现在Q.front和Q.rear都指向离原来队首最近的节点。倘若执行Destoryqueue()前节点的个数>=2,则第一次执行次循环后仍满足循环条件继续循环,最终整个队列的内存全部被释放,队列被销毁。(建议在理解的消早时候画张图效果较好)

}

例如课室有8排,5个人要选择坐哪一排,如果

第一个人要坐第 2 排,

第二个人要坐第 3 排,

第三个人要坐第 1 排,

第四个人要坐第 2 排,

第五个人要坐第 1 排,

则第2排坐了第1,第4个人,第3排坐了第2个人,第1排坐了第3,第5个人,

那么这5个人组成的整个队列是这样子的:

1 4 2 3 5。

需要代码实现吗?

#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std

const int N = 1010

const int M = 100100

int head[N], tail[N], en

int edge[M], nxt[M], pre[M]

int num[N], use[N], numh, numt

class Queue

{

    void add(int x, int y)

    {

        edge[en] = y

        nxt[en] = tail[x]

        pre[nxt[en]] = en

        pre[en] = -1

        if (tail[x] == -1)

        {

            head[x] = en

        }

        tail[x] = en++

    }

public:

    Queue()

    {

       漏亮 memset(tail, -1, sizeof tail)

        memset(use, 0, sizeof use)

        numh = numt = en = 0

    }

    void EnQueue(int x, int group)

    {

        add(group, x)

        if (!use[group])

        {

            use[group] = 1

            num[numt++] = group

            if (numt 返并宽== N)

                numt = 0

        }

    }

    int DeQueue()

  蔽友  {

        if (head[num[numh]] == -1)

        {

            use[num[numh++]] = 0

            if (numh == N)

                numh = 0

        }

        int &i = head[num[numh]]

        int res = edge[i]

        i = pre[i]

        return res

    }

    bool empty()

    {

        return head[num[numh]] == -1 && (numh + 1) % N == numt

    }

}

int main()

{

    Queue q

    q.EnQueue(1,2)

    q.EnQueue(2,3)

    q.EnQueue(3,1)

    q.EnQueue(4,2)

    q.EnQueue(5,1)

    while(!q.empty())

        cout<<q.DeQueue()<<' '

    cout<<endl

    return 0

}

package list

import java.util.ArrayList

//这是关于List用法,代表性的有LinkedList,ArrayList,Vector用法类似

public class ArrayListTest {

/**

* @param args

*/

public static void main(String[] args) {

ArrayList<String>list = new ArrayList<String>()

//添加

list.add("三国演义")

list.add("西游记")

list.add("判笑水浒传")

list.add("红楼梦")

//修改

list.set(0, "三国志")

//查询某个元素是否存在

boolean flag = list.contains("西游记")

System.out.println(flag)

//删除

list.remove(2)//list.remove("水浒传")

//遍历

int size = list.size()

for ( int i=0i<sizei++)

{

String str =(String)list.get(i)//得到某个位置的元素

System.out.println(str)

}

}

}

////////////////////////下面是排序的

package list

import java.util.ArrayList

import java.util.Collections

//这是关于List用法,代表性的有LinkedList,ArrayList,Vector用法类似

//排序

//Collections可以排序,绝明还可以得到最大,最小数值,还可以将集合反转

public class SortListTest {

/**

* @param args

*/

@SuppressWarnings("unchecked")

public static void main(String[] args) {

ArrayList list = new ArrayList()

//添加掘宏含

list.add(45)

list.add(67)

list.add(87)

list.add(23)

list.add(67)

Collections.sort(list)//升序

//Collections.sort(list,Collections.reverseOrder())//降序

//遍历

int size = list.size()

for ( int i=0i<sizei++ )

{

Integer str =(Integer)list.get(i)//得到某个位置的元素

System.out.println(str)

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12475510.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存