• 首页
  • 作文
  • 散文
  • 故事
  • 古诗
  • 短文
  • 语录
  • 写作
  • 诗歌
  • 百科
  • 知识
  • 首页
  • 作文
  • 散文
  • 故事
  • 古诗
  • 短文
  • 语录
  • 写作
  • 诗歌
  • 百科
  • 知识
首页 » 生活常识 » 队列的实现方法(队列操作,分别说明这些操作实现的步骤与方法)

队列的实现方法(队列操作,分别说明这些操作实现的步骤与方法)

分类:生活常识 日期:2022-09-22 19:46 浏览:3 次

1.队列有哪些操作,分别说明这些操作实现的步骤与方法

以下是两个线程:

import java.util.*;

public class Thread_List_Operation {

//假设有这么一个队列

static List list = new LinkedList();

public static void main(String[] args) {

Thread t;

t = new Thread(new T1());

t.start();

t = new Thread(new T2());

t.start();

}

}

//线程T1,用来给list添加新元素

class T1 implements Runnable{

void getElemt(Object o){

Thread_List_Operation.list.add(o);

System.out.println(Thread.currentThread().getName() + "为队列添加了一个元素");

}

@Override

public void run() {

for (int i = 0; i < 10; i++) {

getElemt(new Integer(1));

}

}

}

//线程T2,用来给list添加新元素

class T2 implements Runnable{

void getElemt(Object o){

Thread_List_Operation.list.add(o);

System.out.println(Thread.currentThread().getName() + "为队列添加了一个元素");

}

@Override

public void run() {

for (int i = 0; i < 10; i++) {

getElemt(new Integer(1));

}

}

}

//结果(乱序)

Thread-0为队列添加了一个元素

Thread-1为队列添加了一个元素

Thread-0为队列添加了一个元素

Thread-1为队列添加了一个元素

Thread-1为队列添加了一个元素

Thread-1为队列添加了一个元素

Thread-1为队列添加了一个元素

Thread-1为队列添加了一个元素

Thread-1为队列添加了一个元素

Thread-1为队列添加了一个元素

Thread-1为队列添加了一个元素

Thread-1为队列添加了一个元素

Thread-0为队列添加了一个元素

Thread-0为队列添加了一个元素

Thread-0为队列添加了一个元素

Thread-0为队列添加了一个元素

Thread-0为队列添加了一个元素

Thread-0为队列添加了一个元素

Thread-0为队列添加了一个元素

Thread-0为队列添加了一个元素

2.c语言实现队列和栈的方法

#define OVERFLOW -1#define OK 1#define ERROR 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define N 20typedef char SElemType; typedef int Status; typedef struct { SElemType *base; SElemType *top; int stacksize;}SqStack; #include#include Status CreatStack(SqStack &S){ //创建栈 S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK;}//CreatStack Status Push(SqStack &S,SElemType e){ //插入e为新的栈顶元素 if(S.top-S.base>=S.stacksize){//栈满,追加存储空间 S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base)exit (OVERFLOW);//存储空间分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return OK;}//Push Status Pop(SqStack &S ,SElemType &e){ //若栈不空,删除栈顶元素,并用e返回其值 if(S.top==S.base) return ERROR; e=*--S.top; return OK;}//Pop typedef char QElemType;typedef struct QNode{ QElemType data; struct QNode *next;}QNode,*QNodePtr; typedef struct{ QNodePtr front; QNodePtr rear;}LinkQueue; Status CreatQueue(LinkQueue &Q){ //建立一个空的链式栈 Q.front=Q.rear=(QNodePtr)malloc(sizeof(QNode)); if(!Q.front)exit(OVERFLOW); Q.front->next=NULL; return OK;} Status EnQueue(LinkQueue &Q,QElemType e){ QNodePtr p;p=(QNodePtr)malloc(sizeof(QNode));if(!p)exit(OVERFLOW);p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;return OK;} Status DeQueue(LinkQueue &Q,QElemType &e){QNodePtr p;if(Q.front==Q.rear) return ERROR;p=Q.front->next; e=p->data;Q.front->next=p->next;if(Q.rear==p) Q.rear=Q.front;free(p);return OK;} int stackPalindrom_Test()//判别输入的字符串是否回文序列,是则返回1,否则返回0{ printf("栈练习,请输入要判断的字符串以#作为结束符,不要超过二十个字符\n"); SqStack S; CreatStack(S); char c; SElemType a; SElemType b[N]; int count = 0; fgets( b, N, stdin ); while((b[count])!='#') { Push(S,b[count]); //进栈 count++; } int i = 0; while(i 0) { DeQueue(Q,a); if(a!=b[count]) return ERROR; } return OK;}//queuePalindrom_Test Status main(){ if(stackPalindrom_Test()==1) printf("是回文\n"); else printf("不是回文\n"); if(queuePalindrom_Test()==1) printf("是回文\n"); else printf("不是回文\n"); return OK;}。

3.C语言的队列如何实现和表示

我能想到的有两种方法(假设队列元素都是int)

一,用链表的方法

struct A

{

int n;

struct A *a;

} *p,*head,*rear;

head=rear=NULL;/*头指针,尾指针*/

添加元素:p=(struct A*)malloc(sizeof(struct A));。。给新元素赋值。..;rear->a=p;rear=p;

当然添加第一个元素的时候要给head赋值。

删除元素:p=head;head=head->a;free(p);

用的是单向链表,当然也可以用双向链表,不过删除,添加元素的过程要麻烦点。

二,利用数组,当然也可以开辟动态储存空间

int a[N],*head,*rear; N就是个常数

head=rear=a;

添加元素:scanf("%d",rear-a==N?rear=a:++rear);

删除元素:head-a==N?head=a:head++;

当然要检查队列是否溢出,可以设变量n=0;

每次添加元素n++

每次删除元素n--

当nN数据溢出

4.队列教学法

齐步是军人行进的常用步法。

口令:齐步——走。

要领:左脚向正前方迈出约75厘米,按照先脚跟后脚掌的顺序着地,同时身体重心前移,右脚照此法动作;上体正直,微向前倾;手指轻轻握拢,拇指贴于食指第二节;两臂前后自然摆动,向前摆臂时,肘部弯曲,小臂自然向里合,手心向内稍向下,拇指根部对正衣扣线,并高于春秋常服最下方衣扣约5厘米(着夏常服、水兵服时,高于内腰带扣中央约5厘米;着作训服时,与外腰带扣中央同高),离身体约30厘米;向后摆臂时,手臂自然伸直,手腕前侧距裤缝线约30厘米。行进速度每分钟116-122步。

5.栈与队列的实现(java)

import java.util.Stack;

public class Translate {

//程序入口

public static void main(String[]args){

int n = Translate.translate(3467,8);

System.out.println("结果是:"+n);

}

public static int translate(int number, int base_num) {

//使用栈

Stack<Integer>stack = new Stack<Integer>();

while(number>0){

//压栈

stack.push(number % base_num);

number /= base_num;

}

int n = stack.size();

int val=0;

//依次出栈并合成结果(用我们熟悉的十进制表示,所以乘以10)

for(int i=0;i<n;i++){

val=val*10+stack.pop();

}

return val;

}

}

6.数据结构设计队列实现下列算法

#include #include typedef struct QNode { int data; struct QNode *next; int Queusize; } QNode,*QueuePtr;//定义队列结点类型 typedef struct { QueuePtr front; QueuePtr rear; } LinkQueue;//队列的类型 void InitQueue(LinkQueue *Q)//创建队列 { Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode)); Q->front->next=NULL; } void EnQueue(LinkQueue *Q,int e)//将元素插入队列 { QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode)); p->data=e; p->next=NULL; Q->rear->next=p; Q->rear=p; } int DeQueue(LinkQueue *Q)//将元素出列且返回元素的位置 { int e; QueuePtr p; p=Q->front->next; e=p->data; Q->front->next=p->next; if(Q->rear==p) Q->rear=Q->front; free(p); return (e); } int QueueEmpty(LinkQueue *Q)//判断队列是否为空 { if(Q->front==Q->rear ) return 1; else return 0; } void Select(LinkQueue *Q,int a) { int b,i;QueuePtr p; if(a==1) { printf("请输入元素,以0结束:\n"); scanf("%d",&b); while(b!=0) { EnQueue(Q,b); scanf("%d",&b); } } if(a==2) { printf("请输入出对元素个数\n"); scanf("%d",&b); for(i=0;ifront->next; while(p!=Q->rear) { printf("%d ",p->data); p=p->next; } printf("%d ",p->data); } } int main() { LinkQueue Q;int a,b; InitQueue(&Q); printf("1、入队列 2、出队列 3、显示队列的内容 4、退出\n"); scanf("%d",&a); if(a==4) return 0; else { Select(&Q,a); printf("请输入选择:0结束,1继续\n"); scanf("%d",&b); while(b) { printf("1、入队列 2、出队列 3、显示队列的内容 4、退出\n"); scanf("%d",&a); if(a==4) return 0; Select(&Q,a); printf("请输入选择:0结束,1继续\n"); scanf("%d",&b); } return 1; } } 这个程序基本涵盖了以上方法。

7.循环队列的实现和运算

循环队列 C++实现方式

如果用C的话 可以参照修改一下

#include

using namespace std;

const int default_max_size = 100;

template

class loop_queue

{

T *queue;

int s;

int read;

int write;

int len;

public:

loop_queue(int max=default_max_size):read(0),write(0),len(0)

{

if(max s = max;

queue = new T[s];

}

~l订鼎斥刮俪钙筹水船惊oop_queue()

{

delete [] queue;

}

int put(T &v)

{

if(full()) return -1;

queue[write] = v;

write = (write + 1) % s;

len ++;

return 0;

}

int get(T &v)

{

if(empty()) return -1;

v = get();

return 0;

}

const T& get()

{

int r;

r = read;

read = (read + 1)%s;

len --;

return queue[r];

}

bool empty()const

{

return len == 0;

}

bool full()const

{

return len == s;

}

const int &size()const

{

return s;

}

const int & items()const

{

return len;

}

};

typedef loop_queue ILQ;

int main()

{

ILQ q(10);

int i;

for(i = 0; ; i ++)

if(q.put(i)) break;

cout while(!q.empty()) cout cout return 0;

} 是否有问题? 有问题请追问 没问题请采纳

队列的实现方法有哪些

相关推荐:
  • 炒鱼片怎么做好吃又滑嫩(炒鱼片怎么做才好吃)
  • 固态发酵白酒和液态发酵白酒有什么区别
  • us9码是多大(us9相当于国内多少码)
  • 快递可以快递小猫咪的吗?(活体猫咪可以快递吗)
  • 猜字谜语大全及答案(猜字谜语大全及答案一年级上册)
上一篇:提取医疗风险基金的(医疗风险基金按什么文件规定提取的) 下一篇:幸福的反义词是什么_词学习

相关推荐

炒鱼片怎么做好吃又滑嫩(炒鱼片怎么做才好吃)
固态发酵白酒和液态发酵白酒有什么区别
us9码是多大(us9相当于国内多少码)
快递可以快递小猫咪的吗?(活体猫咪可以快递吗)
猜字谜语大全及答案(猜字谜语大全及答案一年级上册)
喜糖礼盒里需放几样东西
面条怎么做才能更好吃(番茄面条怎样做才好吃)
汉堡里面的沙拉酱一般是什么沙拉酱(汉堡里面的沙拉酱用什么最好)
凉薯花能吃吗?(红薯花能吃吗)
铝合金窗上久经暴晒的胶带如何清除掉
潮流时尚 写作素材 创新创业
生活常识 策划方案 安全知识
自考专业 家居生活 三农创业
励志故事 时尚穿搭 星座知识
热门分类

声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
 蜀ICP备2020033479号-4  Copyright © 2016  学习鸟. 页面生成时间:2.703秒

返回顶部