以下是两个线程:
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为队列添加了一个元素
#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;}。
我能想到的有两种方法(假设队列元素都是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数据溢出
齐步是军人行进的常用步法。
口令:齐步——走。
要领:左脚向正前方迈出约75厘米,按照先脚跟后脚掌的顺序着地,同时身体重心前移,右脚照此法动作;上体正直,微向前倾;手指轻轻握拢,拇指贴于食指第二节;两臂前后自然摆动,向前摆臂时,肘部弯曲,小臂自然向里合,手心向内稍向下,拇指根部对正衣扣线,并高于春秋常服最下方衣扣约5厘米(着夏常服、水兵服时,高于内腰带扣中央约5厘米;着作训服时,与外腰带扣中央同高),离身体约30厘米;向后摆臂时,手臂自然伸直,手腕前侧距裤缝线约30厘米。行进速度每分钟116-122步。
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;
}
}
#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; } } 这个程序基本涵盖了以上方法。
循环队列 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;
} 是否有问题? 有问题请追问 没问题请采纳
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:2.703秒