以下是兩個線程:
import java.util.*;
public class Thread_List_Operation {
//假設(shè)有這么一個隊列
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));
}
}
}
//結(jié)果(亂序)
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){ //創(chuàng)建棧 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("棧練習(xí),請輸入要判斷的字符串以#作為結(jié)束符,不要超過二十個字符\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;}。
我能想到的有兩種方法(假設(shè)隊列元素都是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;
當(dāng)然添加第一個元素的時候要給head賦值。
刪除元素:p=head;head=head->a;free(p);
用的是單向鏈表,當(dāng)然也可以用雙向鏈表,不過刪除,添加元素的過程要麻煩點。
二,利用數(shù)組,當(dāng)然也可以開辟動態(tài)儲存空間
int a[N],*head,*rear; N就是個常數(shù)
head=rear=a;
添加元素:scanf("%d",rear-a==N?rear=a:++rear);
刪除元素:head-a==N?head=a:head++;
當(dāng)然要檢查隊列是否溢出,可以設(shè)變量n=0;
每次添加元素n++
每次刪除元素n--
當(dāng)nN數(shù)據(jù)溢出
齊步是軍人行進的常用步法。
口令:齊步——走。
要領(lǐng):左腳向正前方邁出約75厘米,按照先腳跟后腳掌的順序著地,同時身體重心前移,右腳照此法動作;上體正直,微向前傾;手指輕輕握攏,拇指貼于食指第二節(jié);兩臂前后自然擺動,向前擺臂時,肘部彎曲,小臂自然向里合,手心向內(nèi)稍向下,拇指根部對正衣扣線,并高于春秋常服最下方衣扣約5厘米(著夏常服、水兵服時,高于內(nèi)腰帶扣中央約5厘米;著作訓(xùn)服時,與外腰帶扣中央同高),離身體約30厘米;向后擺臂時,手臂自然伸直,手腕前側(cè)距褲縫線約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("結(jié)果是:"+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;
//依次出棧并合成結(jié)果(用我們熟悉的十進制表示,所以乘以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;//定義隊列結(jié)點類型 typedef struct { QueuePtr front; QueuePtr rear; } LinkQueue;//隊列的類型 void InitQueue(LinkQueue *Q)//創(chuàng)建隊列 { 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結(jié)束:\n"); scanf("%d",&b); while(b!=0) { EnQueue(Q,b); scanf("%d",&b); } } if(a==2) { printf("請輸入出對元素個數(shù)\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、顯示隊列的內(nèi)容 4、退出\n"); scanf("%d",&a); if(a==4) return 0; else { Select(&Q,a); printf("請輸入選擇:0結(jié)束,1繼續(xù)\n"); scanf("%d",&b); while(b) { printf("1、入隊列 2、出隊列 3、顯示隊列的內(nèi)容 4、退出\n"); scanf("%d",&a); if(a==4) return 0; Select(&Q,a); printf("請輸入選擇:0結(jié)束,1繼續(xù)\n"); scanf("%d",&b); } return 1; } } 這個程序基本涵蓋了以上方法。
循環(huán)隊列 C++實現(xiàn)方式
如果用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;
} 是否有問題? 有問題請追問 沒問題請采納
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時間:2.703秒