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 listimport 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)
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)