使用队列栈结构反序输出字符串

时间:2019-05-12 00:11:09下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《使用队列栈结构反序输出字符串》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《使用队列栈结构反序输出字符串》。

第一篇:使用队列栈结构反序输出字符串

队列结构

实验目的

1.熟练掌握栈和队列的特点。

2.掌握栈的定义和基本操作,熟练掌握顺序栈的操作及应用。3.掌握对列的定义和基本操作,熟练掌握链式队列的操作及应用, 掌握环形队列的入队和出队等基本操作。

4.加深对栈结构和队列结构的理解,逐步培养解决实际问题的编程能力。

实验要求

1.认真阅读和掌握本实验的算法。2.上机将本算法实现。

3.保存程序的运行结果,并结合程序进行分析。

4.上机过程中,能够熟练运用高级语言的程序调试器DEBUG调试程序。5.上机后,认真整理源程序及其注释,完成实验报告(包括源程序、实验结果、算法分析、心得体会等)。

实验内容

1.在VC++环境下编写调试队列初始化,删除结点,查找结点,插入结点的算法和函数。

2.把已布置作业中的算法改成程序,进行运行。

实验清单

#include #include

#define size 50

typedef struct { char str[size];int top;}seqstack;

void initstack(seqstack *s);int pop(seqstack *s,char x);int push(seqstack *s,char x);void main(){ int i,j;char str[size],a;seqstack *s;printf(“please input a string :n”);gets(str);s=(seqstack*)malloc(size);initstack(s);for(i=0;str[i]!='';i++){ push(s,str[i]);j++;} printf(“the changed string is:n”);for(j=i;j>0;j--){ pop(s,a);

} printf(“n”);}

void initstack(seqstack *s){

s->top=-1;}

int push(seqstack *s,char x){ if(s->top==size-1)

return(0);s->top++;s->str[s->top]=x;return(1);}

int pop(seqstack *s,char x){ if(s->top==-1)

return(0);else {

}

} x=s->str[s->top];s->top--;printf(“%c”,x);return(1);输入数据及相应运行结果

实验心得

在这节课中,我学会用调试这种方法来找出自己的错误

在实验的时候,发现自己对指针内存分配的情况还不是很清楚,会造成内存出错 经过这次上机实验,感觉到自己对序列栈的理解更加深刻,使用起来也更加得心应手

第二篇:字符串输出格式

printf的格式控制的完整格式:

%-0m.nl或h格式字符

下面对组成格式说明的各项加以说明:

①%:表示格式说明的起始符号,不可缺少。

②-:有-表示左对齐输出,如省略表示右对齐输出。

③0:有0表示指定空位填0,如省略表示指定空位不填。

④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。

n指精度,用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。

⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。

格式小结:

(1)最常用的格式是%d,含义是以10进制形式打印一个整数。

如果输出的整数是负数,则输出的第一个字符就是-号。

%d:按整型数据的实际长度输出。

%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。

%ld:输出长整型数据。

(2)%u格式与%d格式类似,只不过要求打印无符号10进制整数。

以无符号十进制形式输出整数。

对长整型可以用“%lu”格式输出。同样也可以指定字段宽度用“%mu”格式输出。

(3)%o格式请求输出8进制整数,以无符号八进制形式输出整数。

对长整型可以用“%lo”格式输出。同样也可以指定字段宽度用“%mo”格式输出。

(4)%x和%X格式请求输出16进制整数。

%x格式中用小写字母a,b,c,d,e,f来表示10到15之间的数,以无符号十六进制形式输出整数。

对长整型可以用“%lx”格式输出。同样也可以指定字段宽度用“%mx”格式输出。%X格式中用大写字母A,B,C,D,E,F来表示10到15之间的数

共同点:8进制和16进制整数总是作为无符号数处理的。

(5)%s格式用于打印字符串,与之对应的参数应该是一个字符指针,待输出的字符始于该指针所指向的地址,直到出现一个空字符('')才终止。%s:例如:printf(“%s”, “CHINA”)输出“CHINA”字符串(不包括双引号)。%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格。

%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。

%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。

%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。

(6)%c格式用于打印单个字符:例如:

printf(“%c”,c);等价于 putchar(c);

(7)%g,%f和%e这三个格式用于打印浮点值。

%g格式用于打印那些不需要按列对齐的浮点数特别有用。其作用有二: 一,去掉该数尾多余的零(没有达到六位的数)

二,保留六位有效数字(多余六位的)

%e格式用于打印浮点数时,一律显示地使用指数形式:例如:输出圆周率时是:

3.141593e+00

两者的区别:

%g格式打印出的数是总共6位有效数字

%e格式打印出小数点后的6位有效数字

%f禁止使用指数形式来表示浮点数。因此圆周率输出为:3.141593

(但注意它的精度要求:也是小数点后6位有效数字)

(8)%%格式用于打印一个%字符。

(9)%E和%G只是在输出时用大写字母(E)代替了小写字母(e)

⑦f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:

%f:不指定宽度,整数部分全部输出并输出6位小数。

%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。⑧e格式:以指数形式输出实数。可用以下形式:

%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。

%m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。

⑨g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。/*******************************************************************/ unsigned int i=295;

printf(“%dn”,i);

295

Press any key to continue

(1).可以在“%”和字母之间插进数字表示最大场宽。

例如: %2d 表示输出3位整型数, 不够2位右对齐。

例如: %5d 表示输出3位整型数, 不够5位右对齐。

例如: %10d 表示输出3位整型数, 不够10位右对齐。

unsigned int i=295;

printf(“%2dn”,i);

printf(“%5dn”,i);

printf(“%10dn”,i);

295

295

295

Press any key to continue

(2).补0或者其它

例如: %02d 表示输出3位整型数, 不够2位右对齐,补0。

例如: %05d 表示输出3位整型数, 不够5位右对齐,补0。

例如: %010d 表示输出3位整型数, 不够10位右对齐,补0。

unsigned int i=295;

printf(“%02dn”,i);

printf(“%05dn”,i);

printf(“%010dn”,i);

295

00295

0000000295

Press any key to continue

(3).负数

int i=-295;

printf(“%02dn”,i);

printf(“%05dn”,i);

printf(“%010dn”,i);

-295

-0295

-000000295

Press any key to continue

(4).可以控制输出左对齐或右对齐, 即在“%”和字母之间加入一个“-” 号可 说明输出为左对齐, 否则为右对齐。

unsigned int i=295;

printf(“%-02dn”,i);

printf(“%-05dn”,i);

printf(“%-010dn”,i);

295

295

295

Press any key to continue

(5).可以在“%”和字母之间加小写字母l, 表示输出的是长型数。

例如: %ld 表示输出long整数

%lf 表示输出double浮点数

(6).%9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6, 小数点占一位, 不够9位右对齐。

例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则第9个字符以后的内容将被删除./*

unsigned int i=295;

printf(“%dn”,i);

printf(“%1dn”,i);

printf(“%09dn”,i);

printf(“%09dn”,(unsigned char)i);

printf(“%9dn”,(unsigned char)i);

printf(“%-9dn”,(unsigned char)i);

*/

/*

295

295

000000295

000000039

Press any key to continue

*/

/*******************************************************************/ 对于m.n的格式还可以用如下方法表示(例)

int m=10,n=5;

char ch[]=“abcdefghijklmnopqrst”;

printf(“%*.*sn”,m,n,ch);//输出为abcde

前边的*定义的是总的宽度,后边的定义的是输出的个数,分别对应外面的参数m和n。

我想这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式 /*******************************************************************/ “%08lxn”,4byte

“%04xn”,2byte

“%-2.2BX”,1byte

第三篇:实验三 栈和队列

实验报告三 栈和队列

班级: 姓名: 学号: 专业:

一、实验目的:

(1)掌握栈的基本操作的实现方法。

(2)利用栈先进后出的特点,解决一些实际问题。(3)掌握链式队列及循环队列的基本操作算法。(4)应用队列先进先出的特点,解决一些实际问题。

二、实验内容:

1、使用一个栈,将一个十进制转换成二进制。粘贴源程序:

package Word1;

public class Node {

} T data;Node next;public Node(T a){ } public Node(T a,Node n){

} this.data=a;this.next=n;this(a,null);

-----package Word1;

public class Stack {

} public Node Top;public Stack(){ } public void push(T a){ } public T Out(){

}

T a=this.Top.data;this.Top=this.Top.next;return a;this.Top=new Node(a,this.Top);this.Top=null;

--package Word1;

import java.util.*;

public class Test {

} static Scanner scan=new Scanner(System.in);static int temp=0;static int a=0;static Stack s=new Stack();public static void main(String[] args){

} temp=scan.nextInt();while(true){

} while(s.Top!=null){

} System.out.printf(“%d”,s.Out());a=temp%2;s.push(a);temp=temp/2;if(temp==0)break;

粘贴测试数据及运行结果:

2、回文是指正读反读均相同的字符序列,如“acdca”、“dceecd”均是回文,但“book”不是回文。利用1中的基本算法,试写一个算法判定给定的字符串是否为回文。(提示:将一半字符入栈,依次弹出与另一半逐个比较)粘贴源程序:---------package Word1;

import java.util.*;public class Test1 {

} static Scanner sc=new Scanner(System.in);static char[] c={'a','b','c','b','a'};static Stack s=new Stack();public static void main(String[] args){

} public static String One(){

} public static String Two(){

} for(int i=0;i<(c.length/2);i++){ } for(int i=c.length/2;i

} return “该字符串是回文”;if(s.Out()!=c[i])return “该字符不是回文”;s.push(c[i]);for(int i=0;i<(c.length/2);i++){ } for(int i=c.length/2+1;i

} return “该字符串是回文”;if(s.Out()!=c[i])return “该字符串不是回文”;s.push(c[i]);if(c.length%2!=0){

} else{ } System.out.println(Two());System.out.println(One());

-------------

粘贴测试数据及运行结果:

3、使用3个队列分别保留手机上最近10个“未接来电”、“已接来电”、“已拨电话”。

粘贴源程序:

package Word3;

import java.util.*;

public class Queue {

LinkedList list;public Queue(){ } public void enQ(E a){ } public E deQ(){ } public boolean isEmpty(){ } public void Pri(){ while((list.isEmpty()))return list.isEmpty();return list.removeLast();list.addLast(a);list=new LinkedList();

} } System.out.printf(“%d n”,this.deQ());

package Word3;

import java.util.*;

public class Test {

static Queue list1=new Queue();static Queue list2=new Queue();static Queue list3=new Queue();static Scanner sc=new Scanner(System.in);public static void main(String[] args){ } public static void Frame(){

} static private void T2(){

int c;int[] a={22324,321321,222333};for(int i=0;i

1、查询

2、增加”);c=sc.nextInt();if(c==1){

} else{ c=sc.nextInt();while(!(list2.isEmpty()))System.out.printf(“%d n”,list2.deQ());list2.enQ(a[i]);int c=0;System.out.println(“请选择记录类型:”);System.out.println(“

1、未接来电

2、已接来电

3、已拨电话”);switch(c=sc.nextInt()){

} case 1:T1();break;case 2:T2();break;case 3:T3();break;Frame();

}

} list2.enQ(c);while(!(list2.isEmpty()))System.out.printf(“%d n”,list2.deQ());sc.close();static private void T3(){

} static private void T1(){

int c;int[] a={12324,321321,222333};for(int i=0;i

1、查询

2、增加”);c=sc.nextInt();if(c==1){

} else{ c=sc.nextInt();while(!(list1.isEmpty()))System.out.printf(“%d n”,list1.deQ());list1.enQ(a[i]);int c;int[] a={32324,321321,222333};for(int i=0;i

1、查询

2、增加”);c=sc.nextInt();if(c==1){

} else{

} sc.close();c=sc.nextInt();list3.enQ(c);while(!(list3.isEmpty()))System.out.printf(“%d n”,list3.deQ());while(!(list3.isEmpty()))System.out.printf(“%d n”,list3.deQ());list3.enQ(a[i]);

}

}

} list1.enQ(c);while(!(list1.isEmpty()))System.out.printf(“%d n”,list1.deQ());sc.close();

粘贴测试数据及运行结果:

三、心得体会:(含上机中所遇问题的解决办法,所使用到的编程技巧、创新点及编程的心得)

第四篇:数据结构栈与队列报告

栈和队列上机实习

1、实验目的:

(1)熟练掌握栈的逻辑结构和操作规则,能在相应的实际问题中正确选用该结构。(2)熟练掌握栈的2种存储结构实现方法(顺序栈和链栈),两种存储结构和基本运算的实

现算法,注意栈空盒满的判断条件及它们的描述方法。

(3)熟练掌握队列的逻辑结构和操作规范,能在相应的实际问题中正确选用该结构。(4)掌握循环队列与链队列两种存储结构的实现,熟练掌握各种队列基本运算的实现。

2、实验要求:

(1)顺序栈的插入、删除,栈顶数据元素的读取。(2)链栈的插入、删除,栈顶数据元素的读取。(3)循环队列的插入、删除。(4)链队列的插入、删除。

3、实验内容: ① 栈

(1)抽象数据类型定义

typedef struct

{

ElemType data[MaxSize];

//栈的空间大小为MaxSize

int top;

//设置栈顶指针

}SqStack;

//栈的结构定义

在本次实验中,首先建立一个空栈,进入主程序后首先初始化栈为其分配空间,然后进入菜单选择界面,通过不同的数字输入,实现入栈,出栈,读取栈顶元素,显示栈的所有元素,栈的长度,释放栈等操作。

(2)存储结构定义及算法思想

在栈结构体的定义中,typedef int Typeelem 为整型,存储结构(入栈)如下:

cin>>a;

s->top++;

//在入栈是首先将栈顶指针向上加1

s->data[s->top]=a;

//与数组赋值一样,直接赋值

//其他存储与此类似,都是直接赋值与数组的某一位

退栈函数模块:

void Pop(SqStack * &s){

//对指针的引用

if(s->top ==-1){

cout<<“栈是空栈,不能退栈”<

//首先判断是否为空栈,若为空,则退出

return;} cout<<“退栈的元素为:”<data[s->top]<

//显示退栈元素

s->top--;

//栈顶元素减1,指向实际栈的最上面 }

显示栈所有元素函数模块:

void DispStack(SqStack *s){

//从栈顶到栈底顺序显示所有元素

int i;cout<<“栈的元素分别为:”<top;i>=0;i--){ cout<data[i]<<“ ”;

//同过循环实现实现从栈顶元素到栈底元素的遍历以输出

} cout<

栈结构的入栈和退栈是两个相反的过程,先进后出,入栈是先让栈顶指针加1,指向未被赋值位置,然后进行赋值,退栈是先取出退栈元素,然后栈顶元素减1,指向推展后的实际栈顶。诸如读取栈顶元素,显示栈的元素,读取栈的长度,都是用过对栈顶指针实现相关操作。

(3)实验结果与分析

② 循环队列

(1)抽象数据类型定义

typedef struct {

ElemType elem[Maxqsize];

//循环队列的长度为MaxSize

int front,rear;

//设置队列的头指针和尾指针

}SqQueue;

//循环队列的结构体定义

在本次实验中,首先建立一个空队列,进入主程序后首先初始化队列为其分配空间,然后进入菜单选择界面,通过不同的数字输入,实现入队,出队,显示队列的所有元素,队列的长度,释放队列等操作。

(2)存储结构定义及算法思想

在队列结构体的定义中,typedef int Typeelem 为整型,存储(入队)结构如下:

q->rear=(q->rear+1)%Maxqsize;

//尾指针加1

q->elem[q->rear]=a;

//将入队元素装到新的空尾部

在此队列的存储结构的实现:先让队尾指针进1,再将新的元素加入到队尾指针所指示的位置,因此,队尾指针指示实际的队尾位置,队头指针指示实际队头的前一位置,要想退出队头元素,必须先让队头指针进1,才能取出队头元素。

退队函数模块如下:

void deQueue(SqQueue *&q){

//对指针的引用

if(QueueEmpty(q))

{

//调用带返回值的判断空队函数

cout<<“队列为空”<

//判断队列是否为空

}

q->front=(q->front+1)%Maxqsize;

//队头指针进1

cout<<“退队的元素为:”<elem[q->front]<

//取出队头元素 }

遍历队表函数:

void displayqueue(SqQueue *q){

int m;m=q->front+1;

//队头元素进1,指向实际队头

if(QueueEmpty(q))

{

cout<<“队列为空”<

//判断是够为空队

}

cout<<“所有队列元素为:”<

while(q->rear+1>m){

cout<elem[m]<<“ ”;

//通过循环遍历所有元素

m++;

}

cout<

循环队列的入队和退队分别是在队尾与队头跟别进行操作的,通过队头队尾指针的操作便可实现对队列的相关操作。

(3)实验结果与分析

③ 心得体会

本次上机是做栈与队列的操作,这次实验,我有意的用到了对指针的引用与指针实现子函数功能的调用,刚开始编译的时候也有错误,但是在慢慢的摸索中,也逐渐掌握了它们的用法,这次实验也让我熟练了对队列与栈存储结构的应用。

附录:

顺序表源代码: 栈:

#include using namespace std;#define MaxSize 5 typedef int ElemType;int e;typedef struct { ElemType data[MaxSize];int top;}SqStack;

void InitStack(SqStack * &s)

//建立一个空栈,即将栈顶指针指向-1即可 的引用 { s=(SqStack *)malloc(sizeof(SqStack));s->top=-1;}

void ClearStack(SqStack * &s)

//释放栈s占用的存储空间 { free(s);}

void StackLength(SqStack *s)

{ cout<<“栈的长度为:” <<(s->top +1)<

int StackEmpty(SqStack *s){ return(s->top==-1);}

void Push(SqStack *&s){ if(s->top==MaxSize-1)

{

cout<<“栈满”<

//

s=(SqStack *)realloc(s,sizeof(SqStack));} int a;

指针

cout<<“请输入入栈元素”<>a;s->top++;s->data[s->top]=a;}

void Pop(SqStack * &s){ if(s->top ==-1){

cout<<“栈是空栈,不能退栈”<

return;} cout<<“退栈的元素为:”<data[s->top]<top--;}

void GetTop(SqStack * &s,ElemType &e){ if(s->top==-1){cout<<“空栈”<data[s->top];}

void DispStack(SqStack *s)

//从栈顶到栈底顺序显示所有元素 { int i;cout<<“栈的元素分别为:”<top;i>=0;i--){ cout<data[i]<<“ ”;} cout<

cout<<“请选择功能”<

cout<<“

入栈

1”<

cout<<“

出栈

2”<

cout<<“

读取栈顶元素

3”<

cout<<“

显示栈所有元素

4”<

cout<<“

栈的长度

5”<

cout<<“

释放栈

6”<

cin>>k;

switch(k)

{

case 1: Push(s);break;

case 2: Pop(s);break;

case 3: GetTop(s,e);cout<<“栈顶元素为: ”<

case 4: DispStack(s);break;

case 5: StackLength(s);break;

case 6: ClearStack(s);break;

default :break;

} } }

队列:

#include using namespace std;#define Maxqsize 8 typedef int TypeElem;typedef struct {

TypeElem elem[Maxqsize];

int front,rear;}SqQueue;void InitQueue(SqQueue *&q){

q=(SqQueue *)malloc(sizeof(SqQueue));

q->front=q->rear=0;} void ClearQueue(SqQueue *&q){

free(q);exit(0);} void QueueLength(SqQueue *q){

cout<<“队列长度为:”<<(q->rear-q->front+Maxqsize)%Maxqsize<

return(q->front==q->rear);

} void enQueue(SqQueue *&q){ int a;

if((q->rear+1)%Maxqsize==q->front)

{

cout<<“队列已满,无法插入”<

}

cout<<“请输入插入元素”<

cin>>a;

q->rear=(q->rear+1)%Maxqsize;

q->elem[q->rear]=a;} void deQueue(SqQueue *&q){

if(QueueEmpty(q))

{

cout<<“队列为空”<

}

q->front=(q->front+1)%Maxqsize;

cout<<“退队的元素为:”<elem[q->front]<

}

void displayqueue(SqQueue *q){

int m;m=q->front+1;

if(QueueEmpty(q))

{

cout<<“队列为空”<

}

cout<<“所有队列元素为:”<

while(q->rear+1>m)

{

cout<elem[m]<<“ ”;

m++;

}

cout<

int k=0;

SqQueue *q;

InitQueue(q);

if(QueueEmpty(q))cout<<“队列为空”<

while(1){

cout<<“请选择功能”<

cout<<“

入队

cout<<”

出队

cout<<“

队列长度

cout<<”

显示队列元素

cout<<“

释放栈

cin>>k;

switch(k)

{

case 1: enQueue(q);break;

case 2: deQueue(q);break;

case 3: QueueLength(q);break;

case 4: displayqueue(q);break;

case 5: ClearQueue(q);break;

default :break;

} } }

1”<

2“<

4“<

第五篇:实验报告——栈和队列的应用

实验5 栈和队列的应用

目的和要求:

(1)熟练栈和队列的基本操作;(2)能够利用栈与队列进行简单的应用。

一、题目

题目1.利用顺序栈和队列,实现一个栈和一个队列,并利用其判断一个字符串是否是回文。所谓回文,是指从前向后顺读和从后向前倒读都一样的字符串。例如,a+b&b+a等等。

题目2.假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题,并实现。

题目3.打印机提供的网络共享打印功能采用了缓冲池技术,队列就是实现这个缓冲技术的数据结构支持。每台打印机具有一个队列(缓冲池),用户提交打印请求被写入到队列尾,当打印机空闲时,系统读取队列中第一个请求,打印并删除之。请利用队列的先进先出特性,完成打印机网络共享的先来先服务功能。

题目4.假设以数组Q[m]存放循环队列中的元素, 同时设置一个标志tag,以tag == 0和tag == 1来区别在队头指针(front)和队尾指针(rear)相等时,队列状态为“空”还是“满”。试编写与此结构相应的插入(enqueue)和删除(dlqueue)算法。

题目5.利用循环链队列求解约瑟夫环问题。

请大家从本组未讨论过的五道题中选择一道,参照清华邓俊辉老师MOOC视频及课本相关知识,编写相应程序。

选择题目3:

打印机提供的网络共享打印功能采用了缓冲池技术,队列就是实现这个缓冲技术的数据结构支持。

二、程序清单

//Ch3.cpp #include #include #include“ch3.h” template void LinkedQueue::makeEmpty()//makeEmpty//函数的实现 { LinkNode*p;while(front!=NULL)//逐个删除队列中的结点

{

p=front;

front=front->link;

delete p;} };template bool LinkedQueue::put_in(T&x){//提交命令函数

if(front==NULL){//判断是否为空

front=rear=new LinkNode;//如果为空,新结点为对头也为对尾

front->data=rear->data=x;

if(front==NULL)//分配结点失败

return false;} else{

rear->link=new LinkNode;//如不为空,在链尾加新的结点

rear->link->data=x;

if(rear->link==NULL)

return false;

rear=rear->link;} return true;};template bool LinkedQueue::carry_out()//执行命令函数 { if(IsEmpty()==true)//判断是否为空

{

return false;} cout<data<<“ ”;//输出链尾的数据,代表执行打印命令

LinkNode*p=front;front=front->link;//删除以执行的命令,即对头修改

delete p;//释放原结点

return true;};void main()

//主函数 { LinkedQueue q;//定义类对象

char flag='Y';

//标志是否输入了命令

const int max=30;//一次获取输入命令的最大个数 while(flag=='Y')//循环 { int i=0;char str[max];//定义存储屏幕输入的命令的数组

gets(str);//获取屏幕输入的命令

while(str[i]!=''){

q.put_in(str[i]);//调用提交命令函数,将每个命令存入队列中

i++;

}

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

if(q.IsEmpty()==true)//判断是否为空,为空则说明没有可执行的命令

{

cout<<“已经没有可执行的命令!是否继续输入命令(Y|N)?”<

cin>>flag;continue;//为空跳出for循环为下次输入命令做好准备

}

q.carry_out();//调用执行命令的函数,将命令打印并删除

}

三、程序调试过程中所出现的错误 无。

四、运行结果:

五、心得体会

打印机采用的缓冲池技术,本质上就是利用了队列的先进先出的特点,体现了先来后到原则。虽然意思很简单,但是实际编程过程中,出现bug的概率还是蛮高的,因为在编写程序中一点疏忽就容易产生错误。

本来我对模板类的使用还是很模糊的,通过这个例子,至少让我清楚了模板类的使用和特点。觉得模板类的恰当使用,对于自己今后的编程好处还是很大的。

下载使用队列栈结构反序输出字符串word格式文档
下载使用队列栈结构反序输出字符串.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    实验总结报告-栈和队列(大全5篇)

    实验总结报告—栈和队列 学号:姓名: 时间: 一、目的 1.做实验的目的 加深对线性结构栈和队列的理解,学会定义栈和队列的存储结构,加强对栈和队列操作机制的理解,掌握栈和队列的基......

    实验三 栈和队列的应用

    一、 实验目的 1 掌握栈的数据类型描述及栈的特点; 2 掌握栈的顺序存储结构的特点及算法描述; 3 掌握队列的数据类型描述及链式存储结构的特点和算法描述。 二、实验内容 停车......

    栈队列实验指导书(共5篇)

    数理学院实验指导书 实验三 栈与队列的实现,栈的应用 【实验目的】 1、掌握栈和队列的特点,即先进后出与先进先出的原则。 2、掌握栈和队列的顺序存储结构和链式存储结构及其......

    2数据结构-实验报告二(栈和队列及其应用)

    实验二 栈和队列及其应用 一、实验目的 1. 掌握栈和队列这两种抽象数据类型的特点,并能在相应的应用问题中正确选用它们。 2. 熟练掌握栈类型的两种实现方法。 3. 熟练掌握循......

    栈板使用评估3.13

    栈板使用评估 原因:为方便生产材料搬运,规划栈板尺寸跟胶框一样大小,可减少搬运人力及胶框损坏增加效率。 一.优点: 1.减少胶筐坏(2011年损坏254 PCS),争取2012年损坏在100 PCS之......

    自动供栈机使用说明书(精选多篇)

    北京阔博包装机械设备有限公司www.xiexiebang.com 自动供栈机使用说明书 阔博包装 www.xiexiebang.com 北京阔博包装机械设备有限公司www.xiexiebang.com 目录1本机特性及......

    使用PowerPoint输出高质量图片(共5篇)

    使用PowerPoint输出高质量图片 已有 4601 次阅读2011-2-22 12:58|个人分类:资源共享|系统分类:教学心得|关键词:PowerPoint 图片 投稿 对于并不太会用Photoshop的人来说,往往......

    空压机主要结构及使用维护(范文模版)

    空压机主要结构及使用维护 一、活塞式空压机的主要构成和工作原理 1、工作原理:电机通过皮带动曲轴旋转,经由连杆带动活塞作往复运动,使气缸、活塞阀组所成的空间产生周期变化,......