回文问题:检测并输出一个文档中的回文单词。(要求用栈和队列实现)

回文问题:检测并输出一个文档中的回文单词。(要求用栈和队列实现)
回文问题:检测并输出一个文档中的回文单词。(要求用栈和队列实现)

湖南科技学院

课程设计报告

课程名称:数据结构课程设计

课程设计题目:回文检测

系:数学与计算科学系

专业:信息与计算科学

年级、班:信计0801

姓名:余丽

学号:200805002126

指导教师:牛志毅

职称:讲师

2010年12月

目录

1.问题描述----------------------------------------------------------------------1

2.具体要求----------------------------------------------------------------------1

3.测试数据----------------------------------------------------------------------1

4.算法思想----------------------------------------------------------------------2

5.模块划分----------------------------------------------------------------------2

6.数据结构----------------------------------------------------------------------3

7.源程序------------------------------------------------------------------------3

8.测试情况--------------------------------------------------------------------7

9.总结体会--------------------------------------------------------------------9

10.参考文献--------------------------------------------------------------------12

一、问题描述

1.1课程设计题目:回文问题----检测并输出一个文档中的回文单词(要求用

栈和队列实现)。

1.2课程设计目的:通过《数据结构》的学习,在课程设计中进一步理解和

掌握所学的各种基本抽象数据类型的逻辑结构、存储结构和操作实现算

法,以及它们在程序中的使用方法,初步掌握软件开发过程的问题分析、设计、编码、测试等基本方法和基本技能。将数据结构应用在具体的编

程方面,更加了解课程所学习的内容及思维逻辑。

1.3课程设计意义:利用数据结构课程设计,了解自己对《数据结构》的理

解和加强自己对数据结构方面的应用知识,使自己掌握使用各种计算机

资料和有关参考资料,提高自己进行程序设计的基本能力。使自己能用

系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具

备的科学的工作方法和作风。

1.4课程设计预期实现效果:能实现简单的栈的操作,解决课程设计所要求

的内容。

二、具体要求

课程设计要求将一个文档中单词进行检测并输出文档中的回文单词,要求程序有检测和输出功能,要求将整个文档中的每个单词都进行检测,并将每个文档中的回文单词输出。编写一个程序来解决一个文档中单词的回文问题,该程序必须有判断一个单词是否是回文单词的功能,因此它应该有将文档分解成一个一个单词来进行判断并输出。根据题目要求,还必须要用栈和队列来实现编写。

三、测试数据

创建一个名为yuli的文档,文档中分四次输入不同的以下数据:

1.Did anna say as anna did? Ma is as selfless as I am. Niagara, O, roar

again. No lemons, no melon. Nurses run. Red root put up to order. en

animals I slam in a net. Was it a rat I saw? King, are you glad you are

king? Dollars make men covetous, then covetous mum make dollars.

did abcba ana.

2.From the stories which ara unfolding ini the novel, the reader should

know the characteristics of the different kinds of lovevol, and should

beeb ablelba to distinguish True Love from the other kinds.

3.True love irisiri acceecca ptance, committal, mutual and without any

post conditions. The love between Lin daiyu and Jia baoyu is

considered tot be True Love. Just saying or hearing I love you is not

goodoog enough because talk is cheap. Action in mutual commitment

is essential, as we can sees in the non dood.

4.We always 121 454454 have dreams. What's ours dream? Do you

know what you exactly snippins want? And do you work hard for it. In

this book, you can 8996998 taste the feeling of the author about his

strong will. In his sooswords, you can find the charm of Chinese. It is

not a book, but a precious deposits. You can get a lot from it. But

unfortunately, the novel was soccos never "completed" to such a state.

On the other hand, maybe, it is snubbuns another soddos kind of

beauty of the book. If you have not read this book yet, just go and read

it. You will love spattaps it.

四、算法思路

1)将文档中的单词读取到一个字符串中,取每个字符串的最后一个字符,如果不是字母或数字就删掉这个字符,字符串的长度减一。

2)调用入栈和入队列函数,将该字符串分别放入栈和队列中。

3)再根据栈的先进后出原理和队列的先进先出原理,将栈和队列中出来的字符串序列进行一一比较,若相等,则将标志flag设为true。

4)如果标志flag为true则该字符串为回文,并将回文单词输出。

五、模块划分

void initStack(SqStack& s);//初始化栈

void push(SqStack& s,char& e);//入栈

char pop(SqStack& s);//出栈

void initQueue(LinkQueue& q);//初始化队列

void insertElem(LinkQueue& q,char e);//在队列中插入元素char deleteElem(LinkQueue& q);//出队列元素

void ShowAbout();

六、数据结构

struct SqStack{

char base[MAXSIZE];

int top;

};

struct QNode{

char data;

QNode* next;

};

struct LinkQueue{

QNode* front;

QNode* rear;

};

void initStack(SqStack& s);//初始化栈

void push(SqStack& s,char& e);//入栈

char pop(SqStack& s);//出栈

void initQueue(LinkQueue& q);//初始化队列

void insertElem(LinkQueue& q,char e);//在队列中插入元素char deleteElem(LinkQueue& q);//出队列元素

void ShowAbout();

七、源程序

Main.cpp

#include

#include "fstream"

#include "string"

#include "jojo.h"

using namespace std;

int main()

{

bool flag=true;

string str1,str2;

LinkQueue q;//队列

SqStack s;//栈

initStack(s);//初始化栈

initQueue(q);//初始化队列

ShowAbout();

ifstream infile("a.txt");

while (!infile.eof())//每次判断一个字符串是否是回文,直到文件读取完

{

flag=true;

infile>>str1;

if (str1[str1.length()-1]=='-')/*如果碰到连字符时,去掉连字符,并在str1后加上连字符后连续的字符串*/

{

str1.erase(str1.length()-1);//去掉连字符‘-’

infile>>str2;

str1+=str2;//将连字符两边的字符串连在一起

}

char c=str1[str1.length()-1];//读取的字符串最后一个字符赋给C

if (c>='0'&&c<='9'||c>='a'&&c<='z'||c>='A'&&c<='Z');

Else //当c是标点符号时就删除

str1.erase(str1.length()-1);

for (int i=0;i

{

push(s,str1[i]);//将读取的字符串入栈

insertElem(q,str1[i]);//将读取的字符串入队列

}

int count=str1.length();//得到读取的字符串长度

while (count)

{

if (pop(s)!=deleteElem(q))/*从队列和栈中读取一个节点,若也有一个不等,则不是回文,否则是回文,输出此回文*/

{

flag=false;

}

count--;

}

if (flag&&infile.eof()==0)

cout<

}

infile.close();

}

Jojo.h

#ifndef JOJO_H_INCLUDED

#define JOJO_H_INCLUDED

#include

using namespace std;

const int MAXSIZE=50;

struct SqStack{

char base[MAXSIZE];

int top;

};

struct QNode{

char data;

QNode* next;

};

struct LinkQueue{

QNode* front;

QNode* rear;

};

void initStack(SqStack& s);

void push(SqStack& s,char& e);

char pop(SqStack& s);

void initQueue(LinkQueue& q);

void insertElem(LinkQueue& q,char e);

char deleteElem(LinkQueue& q);

void ShowAbout();

#endif // JOJO_H_INCLUDED

Jojo.cpp

#include "jojo.h"

void ShowAbout()

{

cout<<"|****************************************|"<

cout<<"* 【回文测试】*"<

cout<<"|****************************************|"<

cout<<"* 开发者:余丽*"<

cout<<"* 学号:XXX *"<

cout<<"* 班级:数学系信计0801班*"<

cout<<"* 2010.11.20 *"<

cout<<"|****************************************|"<

//⑴初始化栈

void initStack(SqStack& s){

s.top=0;

}

void push(SqStack& s,char& e){

if(s.top==MAXSIZE){

cerr<<"Stack overflow!"<

exit(1);

}

s.base[s.top]=e;

++s.top;

}

char pop(SqStack& s){ // 出栈

if(s.top==0){

cerr<<"Stack is empty!"<

exit(1);

}

--s.top;

char temp=s.base[s.top];

return temp;

}

void initQueue(LinkQueue& q){ //队列

q.front=q.rear=new QNode;

if(!q.front)

exit(1);

q.front->next=NULL;

}

void insertElem(LinkQueue& q,char e){

QNode* p=new QNode;

p->data=e;

p->next=NULL;

q.rear->next=p;

q.rear=p;

}

char deleteElem(LinkQueue& q){

if(q.front==q.rear){

cerr<<"Queue is empty!"<

exit(1);

}

QNode* p=q.front->next;

char e=p->data;

q.front->next=p->next;

if(q.rear==p) //若链队为空,则需同时使队尾指针指向头结点

q.rear=q.front;

delete p;

return e;

}

八、测试情况

文件1、Did anna say as anna did? Ma is as selfless as I am. Niagara, O, roar again. No lemons, no melon. Nurses run. Red root put up to order. en animals I slam in a net. Was it a rat I saw? King, are you glad you are king? Dollars make men covetous, then covetous mum make dollars. did abcba ana.

文件2、From the stories which ara unfolding ini the novel, the reader should know the characteristics of the different kinds of lovevol, and should beeb ablelba to distinguish True Love from the other kinds.

文件3、True love irisiri acceecca ptance, committal, mutual and without any post conditions. The love between Lin daiyu and Jia baoyu is considered tot be True Love. Just saying or hearing I love you is not goodoog enough because talk is cheap. Action in mutual commitment is essential, as we can sees in the non dood.

文件4、We always 121 454454 have dreams. What's ours dream? Do you know what you exactly snippins want? And do you work hard for it. In this book, you can 8996998 taste the feeling of the author about his strong will. In his

sooswords, you can find the charm of Chinese. It is not a book, but a precious deposits. You can get a lot from it. But unfortunately, the novel was soccos never "completed" to such a state. On the other hand, maybe, it is snubbuns another soddos kind of beauty of the book. If you have not read this book yet, just go and read it. You will love spattaps it.

九、总结体会

通过做这次课程设计,我发现了自己知识学的不够扎实,知识还存在很多漏洞,也明白了知识需要实践,特别是c、数据结构等课程需要上机实践,但同时我也在做课程设计的时候,通过查阅书籍、上网查资料和在c++群中与很多专业相同的人进行探讨,发现了编程的乐趣,虽然只用栈做本题,但我觉得做题的过程是快乐的,知道了如何主动学习一些语言。

刚开始做题的时候我毫无头绪,查完回文的定义后,看完课件也是照抄不误的把东西搬去执行,看到头文件、源文件和主函数共一两百行的函数却还是无法将东西实现时,甚至有点想放弃了,但后来冷静下来分析后,我觉得不能就此放弃,然后通过网络这个优势,知道了这个东西可以查很多有用的东西,并加了一个c++群,在里面和他们一起探讨,知道了stack可以作为头文件,这就大大缩减了我的程序,慢慢的

对栈的一些操作也就越来越熟悉,并想到了可以通过正序入栈和逆序入栈来比较,刚开始的程序设计为:

#include

#include

#include

#include

using namespace std;

int main()

{

stack s1,s2;//定义两个栈名

ifstream myfile("yuli.txt");//打开文件yuli.txt

string str,temp;//定义两个字符串

bool flag=true;//定义一个标志

cout<<"文档中的回文单词有:"<

while(!myfile.eof())//判断文档中还有数据

{

flag=true;

myfile>>str;//读取数据到str中

if(str[str.length()-1]=='-')//若遇到连字符号

{

str. erase(str.length()-1);//删除连字符号

myfile>>temp;//继读取下一个字符串到temp中

str+=temp;//将连字符号前后的字符串合并为一个字符串}

char c=str[str.length()-1];//判断字符串的最后一个字符

if(c>='0'&&c<='9'||c>='a'&&c<='z'||c>='A'&&c<='Z');//若最后一个字符为字母或数字则什么也不做

else//最后一个字符为标点符号

str.erase(str.length()-1);//删除该标点符号

for(int i=0;i

{

s1.push(str[i]);

}

for(int i=str.length()-1;i>=0;i--)//将字符串逆序入栈

{

s2.push(str[i]);

}

int count=str.length();

while(count)//栈不为空

{

if(s1.top()!=s2.top())//如果两个栈的顶点字符不相等

{

flag=false;//标志设为false

}

s1.pop();//栈s1顶部下移一个位置

s2.pop();//栈s2顶部下移一个位置

count--;

}

if(flag)//标志为true该字符串是回文

cout<

}

myfile.close();//关闭文件

}

做完后还觉得蛮有成就感的,可后来觉得这个很短,不好做课程设计,于是又看书充电,问班上的同学,主函数大致不变,只是把#include作为系统默认的头文件函数改为多文件的形势给以自己定义,这是第一次我很认真的做完一个程序,并对以后学习数据结构和Java有了学好的信心,我不再那么害怕编程了,我相信只要我想学

我是可以学好的。

十、参考文献

⑴严蔚敏, 吴伟民. 数据结构. 清华大学出版社, 2007.4

⑵钱能. C++程序设计教程(第二版). 清华大学出版社, 2005.9

数据结构C语言队列-回文

实验课题一:回文(palindrome)是指一个字符串从前面读和从后面读都一样,仅使用若干栈和队列、栈和队列的ADT函数以及若干个int类型和char类型的变量,设计一个算法来判断一个字符串是否为回文。假设字符串从标准输入设备一次读入一个字符,算法的输出结果为true或者false。 可以用一些字符串测试输出结果,如: "abcdeabcde","madamimadam" 等 #include #include #define m 100 typedef struct { char stack[m]; int top; }stackstru; typedef struct { char queue[m]; int front; int rear; }queuestru; void main() { int stinit(stackstru *s); //初始化顺序栈 int stempty(stackstru *s); //判断栈是否为空 int stpush(stackstru *s,char x); //入栈 char stpop(stackstru *s); //出栈 int quinit(queuestru *q); //初始化循环队列 int quempty(queuestru *q); //判断队列是否为空 int enqueue(queuestru *q,char e); //入队 char dequeue(queuestru *q); //出队 char c; int flag=0; stackstru *s=(stackstru *)malloc(sizeof(stackstru)); queuestru *q=(queuestru *)malloc(sizeof(queuestru)); stinit(s); quinit(q); printf("Input a string:\n");

栈和队列实现回文

栈和队列的应用 1.题目要求: 输入一段字符串,判断字符串是否是回文。回文字符串的定义:字符串的顺序输入和逆序输出内容完全一样。要求出入一段字符串,以‘#’为结束符;判断是否是回文,并输出; 2.实验目的: 通过做回文的题,来熟悉栈和队列的结构以及内容,最终达到掌握 3.实验步骤 1.定义栈的结构体: typedef struct { //栈结构的定义 int *top; int *base; int stacksize; }sqstack; 2.定义队列的结构体: typedef struct queue{ //队列的结构体定义 int data; struct queue *next; }queue,*que; typedef struct { que front; //队列的头指针 que rear; //队列的尾指针 }Q; 4.相关函数: void inistack(sqstack &s)//初始化一个空栈 bool just(sqstack &s)//判断栈是否为空,返回bool类型 void push(sqstack &s,int e)//入栈 char pop(sqstack &s,int &e)//出栈,返回char类型 void initQ(Q &q)//初始化一个空队列 pushq(Q &q,int e)//入队 char popq(Q &q,int &e)//出队,返回char类型 5.总体结构图

6.运行结果分析 完成对字符串的判断以及输出; 7.程序清单

#include #include typedef struct { //栈结构的定义 int *top; int *base; int stacksize; }sqstack; void inistack(sqstack &s)//初始化一个空栈 { s.base=(int *)malloc(100*sizeof(sqstack)); if(!s.base) { cout<<"分配失败"<=s.stacksize) { s.base=(int *)realloc(s.base,(s.stacksize+10)*sizeof(sqstack)); s.top=s.base+s.stacksize; s.stacksize+=10; } *s.top++=e; } char pop(sqstack &s,int &e)//出栈 { if(s.base==s.top) { cout<<"栈已经为空"<

实验三 栈和队列的应用

实验三栈和队列的应用 1、实验目的 (1)熟练掌握栈和队列的结构以及这两种数据结构的特点、栈与队列的基本操作。 (2)能够在两种存储结构上实现栈的基本运算,特别注意栈满和栈空的判断条件及描述方法; (3)熟练掌握链队列和循环队列的基本运算,并特别注意队列满和队列空的判断条件和描述方法; (4)掌握栈和队列的应用; 2、实验内容 1)栈和队列基本操作实现 (1)栈的基本操作:采用顺序存储或链式存储结构(数据类型自定义),实现初始化栈、判栈是否为空、入栈、出栈、读取栈顶元素等基本操作,栈的存储结构自定义。 (2)队列的基本操作:实现循环队列或链队列的初始化、入队列、出队列、求队列中元素个数、判队列空等操作,队列的存储结构自定义。 2)栈和队列的应用 (1)利用栈的基本操作将一个十进制的正整数转换成二进制数据,并将其转换结果输出。 提示:利用栈的基本操作实现将任意一个十进制整数转化为R进制整数算法为: 十进制整数X和R作为形参 初始化栈 只要X不为0重复做下列动作 将x%R入栈 X=X/R 只要栈不为空重复做下列动作 栈顶出栈 输出栈顶元素 (2) 利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Right”,否则输出“Wrong”。

(3) 假设循环队列中只设rear(队尾)和quelen(元素个数据)来分别表示队尾元素的位置和队中元素的个数,写出相应的入队和出队程序。 (4)选作题:编写程序实现对一个输入表达式的括号配对。 3、实验步骤 (1)理解栈的基本工作原理; (2)仔细分析实验内容,给出其算法和流程图; (3)用C语言实现该算法; (4)给出测试数据,并分析其结果; (5)在实验报告册上写出实验过程。 4、实验帮助 算法为: 1) 定义栈的顺序存取结构 2) 分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等) 3) 定义一个函数用来实现上面问题: 十进制整数X和R作为形参 初始化栈 只要X不为0重复做下列动作 将X % R入栈 X=X/R 只要栈不为空重复做下列动作 栈顶出栈 输出栈顶元素 5、算法描述 (1))初始化栈S (创建一个空栈S) void initstack(sqstack *S) { S->base=(ElemType *) malloc(INITSIZE*sizeof(ElemType)); if(!S->base) exit (-1); S->top=0; /*空栈标志*/ S->stacksize = INITSIZE; } (2) 获取栈顶元素 int gettop(sqstack S,ElemType *e) //顺序钱 { if ( S.top==0 ) /* 栈空 */

栈和队列判断回文

(C语言版数据结构)利用栈和队列判断回文 (2010-11-03 11:51:45) 标签: it // File Name: palindrome.h // // Destination:利用栈和队列判断字符串是否是回文 // #ifndef PALINDROME #define PALINDROME #include // 链式队列结构的定义 typedef char ElemType; typedef struct Node { char data; // 元素数据 struct Node *next;// 链式队列中结点元素的指针 }QNode,*QueuePtr; typedef struct { QueuePtr front;// 队列头指针 QueuePtr rear;// 队列尾指针 }LinkQueue; // 栈结构的定义 typedef struct Stack { ElemType *base; ElemType *top; int stacksize; }SqStack;

// 链式队列的基本操作 bool InitQueue(LinkQueue *Q); bool EnQueue(LinkQueue *Q, ElemType e); bool DeQueue(LinkQueue *Q, ElemType *e); // 栈的基本操作 bool InitStack(SqStack *S); bool Push(SqStack *S, ElemType e); bool Pop(SqStack *S, ElemType *e); #endif // File Name: palindrome.cpp // // Destination:利用栈和队列判断字符串是否是回文 #include #include #include "palindrome.h" const int STACK_INIT_SIZE = 100; // 初始分配的长度 const int STACKINCREMENT = 10; // 分配内存的增量 //操作目的:初始化队列 //初始条件:无 //操作结果:构造一个空的队列 //函数参数: //LinkQueue *Q 待初始化的队列 //返回值: // bool 操作是否成功 ------------------------------------------------------------*/ bool InitQueue(LinkQueue *Q) { Q->front = Q->rear = (QueuePtr)malloc(sizeof (QNode)); if (!Q->front) { exit(0); } Q->front->next = NULL; return true; } //操作目的:在队列末尾插入元素e //初始条件:队列Q已存在 //操作结果:插入元素e作为队列新的尾结点 //函数参数:

浅谈“上官体”

浅谈“上官体” 摘要:“上官体”是唐诗史上第一个以个人姓氏命名的风格称号,并且能够盛行于世,其生成原因及诗史价值发人深思。本文就“上官体”生成及特点进行了探讨。 关键词:“上官体”;上官仪;特点;“六对”、“八对” “上官体”,是唐代诗歌史上第一个以个人命名的诗歌风格称号。指唐高宗龙朔年间以上官仪为 代表的宫廷诗风。题材以奉和、应制、咏物为主,内容空泛,重视诗的形式技巧、追求诗的声辞之美。对于“上官体”的诗歌史价值,古今学者持不同评价,但其在诗歌史上的地位及深远影响却是不容置疑的。本文就“上官体”生成及特点进行了探讨。 一、“上官体”生成 关于“上官体”的生成,《旧唐书-上官仪传》就作了如下的描述: 高宗即位,迁秘书少监。龙朔二年,加银青光禄大夫、西台待郎、同东西台三品,兼弘文馆学士如故。本以词彩自达,工于五言诗,好以绮错婉媚为本。仪即贵显,故当时多有效其体者,时人谓为上官体。 显然,其认为“上官体”的生成与诗人的“贵显”有直接关系。然而,笔者以为,以之指上官仪之官运不无道理,而用来描述一种诗歌风格的形成却难以令人信服。“上官体”成为一个颇具理论形态的文学主张,除了因为政治地位的“贵显”以外,更重要的还是当时特殊的政治背景及其自身诗学理论的成熟。所以本文拟从广阔的文化背景和上官仪的诗学理论两方面来系统论述“上官体”的生成。 1、“上官体”生成的文化诠释 要阐述“上官体”的生成,首先就得从广阔的社会背景以及由此影响下的诗人心态出发首先,考察政局的变动与文士政治地位的上升对诗人心态变化的影响。 贞观后期及高宗朝前期,兴起了一大批庶族寒士,他们大多通过科举进身,具有较深厚的社会基础。这些通过科举入仕的朝士, 到高宗朝越来越多, 势力越来越大, 对政治地位、经济利益乃至文化地位的要求越来越迫切, 对当朝勋贵及士族重臣也越来越不满。到龙朔元年高宗政归武后, 朝廷上已经形成了一个由新进寒微文士组成的核心领导层, 加上他们又不断援引寒俊入朝, 庶族寒士的政治势力第一次超过旧勋贵和士族。正如陈寅恪先生所指出的, 高宗朝是中古社会开始新的变革的时代, “开启了后数百年以至一千年之后界局” [1]。而上官仪就是在这种背景下登上政治舞台的。 但与太宗朝贵族文士相比, 龙朔文士群体具有了一些新的文化特征。首先他们多由科举入仕, 且在贞观中都曾受到关陇贵族的压制和排挤。但是随着科举制度的发展和由科举进身人数的增加, 到永徽年间新进文士也逐渐成为朝廷上一支不可忽视的政治力量。 他们不仅在政治上不断打击对手, 而且要在文化上也压制对手。重修《姓氏录》就集中体现了他们的这种心理。显庆四年(659年)六月, 许敬宗希武后旨, 编《姓氏录》, “以后族为第一等, 其余

数据结构_实验三_栈和队列及其应用

实验编号:3四川师大《数据结构》实验报告2016年10月29日 实验三栈和队列及其应用_ 一.实验目的及要求 (1)掌握栈和队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们; (2)本实验训练的要点是“栈”的观点及其典型用法; (3)掌握问题求解的状态表示及其递归算法,以及由递归程序到非递归程序的转化方法。 二.实验内容 (1)编程实现栈在两种存储结构中的基本操作(栈的初始化、判栈空、入栈、出栈等); (2)应用栈的基本操作,实现数制转换(任意进制); (3)编程实现队列在两种存储结构中的基本操作(队列的初始化、判队列空、入队列、出队列); (4)利用栈实现任一个表达式中的语法检查(括号的匹配)。 (5)利用栈实现表达式的求值。 注:(1)~(3)必做,(4)~(5)选做。 三.主要仪器设备及软件 (1)PC机 (2)Dev C++ ,Visual C++, VS2010等 四.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)(1)编程实现栈在两种存储结构中的基本操作(栈的初始化、判栈空、入栈、出栈等); A.顺序储存: 代码部分: 栈" << endl; cout << " 2.出栈" << endl; cout << " 3.判栈空" << endl; cout << " 4.返回栈顶部数据" << endl; cout << " 5.栈长" << endl; cout << " 0.退出系统" << endl;

cout << "你的选择是:" ; } 链式储存: 代码部分: 栈"<>select; switch (select){ case 0:break; case 1: cout<<"push data:"; cin>>e; if(push(L,e)){

栈与队列习题参考答案

习题三参考答案 备注: 红色字体标明的是与书本内容有改动的内容。 一、选择题 1.在栈中存取数据的原则是( B )。 A.先进先出 B. 先进后出 C. 后进后出 D. 没有限制 2.若将整数1、2、3、4依次进栈,则不可能得到的出栈序列是( D )。 A.1234 B. 1324 C. 4321 D. 1423 3.在链栈中,进行出栈操作时(B )。 A.需要判断栈是否满 B. 需要判断栈是否为空 C. 需要判断栈元素的类型 D. 无需对栈作任何差别 4.在顺序栈中,若栈顶指针top指向栈顶元素的下一个存储单元,且顺序栈的最大容量是maxSize,则顺序栈的判空条件是( A )。 A.top==0 B.top==-1 C. top==maxSize D.top==maxSize-1 5.在顺序栈中,若栈顶指针top指向栈顶元素的下一个存储单元,且顺序栈的最大容量是maxSize。则顺序栈的判满的条件是( C )。 A.top==0 B.top==-1 C. top==maxSize D.top==maxSize-1 6.在队列中存取数据元素的原则是( A )。 A.先进先出 B. 先进后出 C. 后进后出 D. 没有限制 7.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和rear分别为队首和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的判空条件是(A )。 A.front==rear B. front!=rear C. front==rear+1 D. front==(rear+1)% maxSize 8.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和rear分别为队首和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的判满条件是(D )。 A.front==rear B. front!=rear C. front==rear+1 D. front==(rear+1)% maxSize 9.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和rear分别为队首 和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的长度是(C )。 A.rear-front B. rear-front+1 C. (rear-front+maxSize)%maxSize D. (rear-front+1)%maxSize 10.设长度为n的链队列采用单循环链表加以表示,若只设一个头指针指向队首元素,则入队操作的时间复杂度 为( B )。 A.O(1) B.O(n) C.O(log2n) D.O(n2) 二、填空题 1.栈是一种操作受限的特殊线性表,其特殊性体现在其插入和删除操作都限制在表尾进行。允许插入和删除 操作的一端称为栈顶,而另一端称为栈底。栈具有后进先出的特点。 2.栈也有两种存储结构,一种是顺序存储,另一种是链式存储;以这两种存储结构存储的栈分别称为顺序 栈和链栈。 3.在顺序栈中,假设栈顶指针top是指向栈顶元素的下一个存储单元,则顺序栈判空的条件是 top==0 ; 栈顶

回文判断实验二

回文判断实验二

洛阳理工学院实验报告 系别计算机系班级B13053 学号B13053235 姓名李登辉 2 课程名称数据结构实验日期2014.3.28 实验名称栈和队列的基本操作成绩 实验目的: 熟悉掌握栈和队列的特点,掌握与应用栈和队列的基本操作算法,训练和提高结构化程序设计能力及程序调试能力。 实验条件: 计算机一台,Visual C++6.0

实验内容: 1.问题描述 利用栈和队列判断字符串是否为回文。称正读与反读都相同的字符序列为“回文”序列。要求利用栈和队列的基本算法实现判断一个字符串是否为回文。栈和队列的存储结构不限。 2.数据结构类型定义 typedef struct { char elem[MAX]; int top; }SeqStack; 顺序栈 3.模块划分 void InitStack(SeqStack *S):栈初始化模块, int Push(SeqStack *S,char x,int cnt):入栈操作 int Pop(SeqStack * S,char * x):出栈操作 void InitQuene(SeqQuene *Q):队列初始化 int EnterQuene(SeqQuene *Q,char x,int cnt):入队操作 int DeleteQuene(SeqQuene *Q,char *x,int cnt):出队操作 void main():主函数 4.详细设计 #include #include #define MAX 50 #define FALSE 0 #define TURE 1//定义栈 typedef struct { char elem[MAX]; int top; }SeqStack; //定义循环队列 typedef struct { char element[MAX]; int front; int rear; }SeqQuene; //初始化栈

婚联回文对

婚联回文对 女爱男才男爱女;花添锦绣锦添花。喜事成双成事喜;钟情爱一爱情钟。意合情投情合意;心同业共业同心。女爱男欢男爱女;鱼依水活水依鱼。富致勤劳勤致富;甘同苦共苦同甘。璧合珠联珠合璧;花开子结子开花。妇随夫唱夫随妇;男敬女尊女敬男。爱人人爱人人爱;圆月月圆月月圆。女哭假意假哭女;男情真心真情男。女嫁男婚男嫁女;夫随妇唱妇随夫。 (招郎用) 新婚三朝联 洞房明烛夜;天上降麟时。 女喜男欢婚美满;花开果结月团圆。鸾凤和鸣添贵子;婚汤并庆宴佳宾。礼行奠雁庆婚典;诗咏关雎歌弄璋。 (生男) 诗题红叶得佳偶;玉种蓝田生小孩。秦晋联欢依旧俗;婚汤并庆树新风。开花结果欢双喜;创业兴家迈小康。鸾凤和鸣昌五世;麒麟叶瑞庆千秋。鱼水合欢天地久;子孙繁衍瓞瓜绵。凤舞鸾歌昌五世;喜筵汤饼庆三朝。绣幕牵丝成伴侣;蓝田种玉降麒麟。女嫁男婚欣大喜;花开果结庆良辰。喜气一堂欢婚礼;春风四座庆弄璋。 (生男) 大展蓬门迎淑女;满盘汤饼宴佳宾。双喜临门迎众客;六亲聚会庆三朝。花前得偶花结果;月下钟情月团圆。婚筵汤筵庆双喜;烧酒甜酒酬众宾。汤饼宴婚迎二喜;洞房弄瓦庆三朝。 (生女) 美景良辰圆伴侣;洞房花烛宴婚汤。婚礼三朝连二喜;春宵一刻值千金。祝鸳鸯和谐到老;贺儿女易养成人。祝夫妇新婚快乐;愿子孙金榜题名。忆去年结婚乐意;喜今日生子欢心。璧合珠联珠合壁;花开子结子开花。诗咏关睢迎淑女;礼行奠雁庆婚汤。婚汤并庆席疏淡;秦晋联欢杯莫空。小阳菊灿姻缘百载;大喜婚汤富贵千秋

洞房嵌名联 洞悉人生计;房谋国治安。 洞察乾坤锦;房生子女贤。 洞内风光媚;房中春意浓。 洞中春汛发;房内杏花开。 洞外桃花开并蒂;房中鸾凤伴双栖。洞外交杯谈喜事;房中共枕结良缘。洞外骚人书墨宝;房中巾帼绘蓝图。洞口桃花滋雨露;房中丹桂吐芬芳。洞中喜种蓝田玉;房内重温红叶诗。洞中对饮桃花酒;房内同吟李白诗。洞内桃花开半夜;房中桂子结三更。洞内偷桃心共乐;房中剪烛梦常圆。爱玩讲进仙人洞;美食光临御膳房。洞内风光娱岁月;房中琴瑟谱春秋。洞外雪花飞六出;房中美女画双眉。洞天福地风光好;房暖情浓幸福长。房中美女因羞色;洞口桃花莫笑人。洞宾三醉成仙祖;房相一谋封汉侯。洞内温泉和尚浴;房中石砚秀才磨。 洞口千金地,君臣百姓出生地; 房中六尺床,夫妇二人圆梦床。洞内风光好,良辰共剪西窗烛。 房中乐事多,午夜同偷王母桃。 同龄婚联 莲花并首开并蒂;夫妇同龄结同心。双飞紫燕迎春舞;并蒂红莲出水香。同庚夫妇婚姻美;和睦家庭幸福长。夫妇同龄恩爱久;乾坤合德子孙贤。同龄伉俪同心德;共枕夫妻共苦甘。同心同德同龄伴;相爱相亲相敬宾。厅堂门婚联 诗咏关睢歌好合;礼行奠雁庆新婚。花好月圆欣大喜;珠联璧合结良缘。男女良缘由己缔;乾坤佳偶自天成。福禄鸳鸯成大喜;吉祥龙凤贺新婚。珠联璧合乾坤定;花好月圆鸾凤鸣。百年恩爱双心结;千里姻缘一线牵。礼行奠雁百年合;诗咏关睢五世昌。婚结文明除旧俗;礼行平等树新风。花好月圆迎淑女;珠联璧合结新婚。海誓山盟谈恋爱;珠联璧合结良缘。梅开五福迎淑女;乐奏三章咏关雎。二姓联姻行大礼;百年合好乐长春。

实验二_栈、队列地实现与应用

实验二栈、队列的实现及应用 实验课程名:数据结构与算法 专业班级:学号::

/*构造空顺序栈*/ int InitStack(SqStack *S) //InitStack() sub-function { S->base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if (!S->base) { printf("分配空间失败!\n"); return (ERROR); } S->top = S->base; S->stacksize = STACK_INIT_SIZE; printf("栈初始化成功!\n"); return (OK); } //InitStack() end /*取顺序栈顶元素*/ int GetTop(SqStack *S, SElemType *e) //GetTop() sub-function { if (S->top == S->base) { printf("栈为空!\n"); //if empty SqStack return (ERROR); } *e = *(S->top - 1); return (OK); } //GetTop() end /*将元素压入顺序栈*/ int Push(SqStack *S) //Push() sub-function { SElemType e; if (S->top - S->base>S->stacksize) { S->base = (SElemType *)realloc(S->base, (S->stacksize + STACKINCREMENT*sizeof(SElemType))); if (!S->base) { printf("存储空间分配失败!\n"); return (ERROR); } S->top = S->base + S->stacksize; S->stacksize += STACKINCREMENT; } fflush(stdin);//清除输入缓冲区,否则原来的输入会默认送给变量x

数据结构实验二(栈和队列)

实验二栈和队列的基本操作及其应用 一、实验目的 1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。 2、掌握栈和队列的特点,即后进先出和先进先出的原则。 3、掌握栈和队列的基本运算,如:入栈与出栈,入队与出队等运算在顺序 存储结构和链式存储结构上的实现。 二、实验内容 本次实验提供4个题目,每个题目都标有难度系数,*越多难度越大,学生 可以根据自己的情况任选一个! 题目一:回文判断(*) [问题描述] 对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如 “abba”是回文,而“abab”不是回文。 [基本要求] (1)数据从键盘读入; (2)输出要判断的字符串; (3)利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出 “Yes”,否则输出“No”。 [测试数据] 由学生任意指定。 题目二:顺序栈和循环队列基本操作(*) [基本要求] 1、实现栈的基本操作 六项基本操作的机制是:初始化栈:init_stack(S);判断栈空:stack_empty(S);取栈顶元素:stack_top(S,x);入栈:push_stack(S,x);出栈:pop_stack(S);判断栈满:stack_full(S) 2、实现队列的基本操作 六项基本操作的机制是:初始化队列:init_queue(Q);判断队列是否为空:queue_empty(Q);取队头元素:queue_front(Q,x);入队:enqueue(Q,x);出队:outqueue(Q,x);判断队列是否为满:queue_full(Q) [测试数据]

由学生任意指定。 题目三:商品货架管理(**) [问题描述] 商店货架以栈的方式摆放商品。生产日期越近的越靠近栈底,出货时从栈顶取货。一天营业结束,如果货架不满,则需上货。入货直接将商品摆放到货架上,则会使生产日期越近的商品越靠近栈顶。这样就需要倒货架,使生产日期越近的越靠近栈底。 [基本要求] 设计一个算法,保证每一次上货后始终保持生产日期越近的商品越靠近栈底。 [实现提示] 可以用一个队列和一个临时栈作为周转。 [测试数据] 由学生任意指定。 三、实验前的准备工作 1、掌握栈的逻辑结构和存储结构。 2、熟练掌握栈的出栈、入栈等操作。 3、掌握队列的逻辑结构和存储结构。 4、熟练掌握队列的出队、入队等操作 四、实验报告要求 1、实验报告要按照实验报告格式规范书写。 *2、写出算法设计思路。 3、实验上要写出多批测试数据的运行结果。 4、结合运行结果,对程序进行分析。 题目四:Rails(ACM训练题) Description There is a famous railway station in PopPush City. Country there is incredibly hilly. The station was built in last century. Unfortunately, funds were extremely limited that time. It was possible to establish only a surface track. Moreover, it turned out that the

栈和队列及其应用7

栈和队列及其应用 栈和队列通常用来存储程序执行期间产生的一些临时信息。这两种特殊表结构的共同特点是,只做插入和删除,不做查找,而且所有的插入和删除只在端点进行。 栈是一种特殊的表结构,满足先进后出策略(LIFO:last in first out),栈的插入和删除操作只在同一端点进行。 可以进行插入的端点叫栈顶(top),另一个端点叫栈底(bottom)。 栈的插入操作又叫进栈(push)或压栈,栈删除操作又叫退栈(pop)或出栈。 栈的结构示意图 注意:进栈和退栈可以不定期地、反复交替进行。 生活中类似栈的应用的例子:装药片的小圆桶,军用子弹卡等。 思考:假设有编号为1,2,3的3辆车,如果按照编号为1,2,3的顺序入栈,那么可能的出栈顺序有几种情况??? 栈的存储方式: 1.顺序存储 2.链式存储 栈的常见操作(顺序存储方式实现) 数组s[M]存储一个栈(M代表栈的容量),top变量指示栈顶指针(下标)。 M=6时:

进栈算法: //宏定义 #define M 6 #define EMPTY -1 void pushs(int s[],int &top) { int x,k; cout<<"请输入要进栈的元素值x="; cin>>x; if(top==M-1) { cout<< "栈已经满,进栈失败!"<

诗对仗基础知识(讲稿)

《诗基础知识》(对仗) 对仗,是我们汉语言文学特有的用词方法。这是因为我们的汉字是一字一音,非常适合组成相对的词和句。不仅我们写格律诗需要对仗,其实,诗、词、曲、赋这类的形式都需要对仗的存在,学习古典诗词,对仗是必须要学好,甚至要精通的。 今天,主要讲一下关于对仗的一些基本知识和相关内容。我们先理请一下概念。 什么是对仗呢?文学大师王力说:“对仗,就是名词对名词,动词对动词,形容词对形容词,数量词对数量词,虚词对虚词”,我查了一下资料,上面说“对仗∶[律诗、骈文等] 按照字音的平仄和字义的虚实做成对偶的语句”。我个人认为,他的这样的定义并不很完整,也有点含糊。“对仗”,其实是属于诗歌类文学体裁的专用名词,对仗是具有很苛刻的要求。它不仅要求“词性相同”,还要求“平仄相对”,还要求“结构一致”,还要求“避免重复”,符合这样的要求,才能称之为“对仗”。严格的讲还有“六相”一说(这我会在后面具体介绍)。 我们还知道一个词叫“对偶”,很多人很多书甚至一些词典都把“对偶”和“对仗”等同了起来,其实,这二者是有区别的,虽然它们很象。正确清晰地理顺二者的概念,对我们今后的学习和运用是有帮助的。 “对偶”是什么?对偶就是一种修辞方法,也称为一种修辞格。“对偶”的定义是---成对使用的两个文句“字数相等,结构、词性大体相同,意思相关。”采用的是一种对称的语言方式,表达形式和内容上的相互映衬的效果。对偶一般表现的是词或词组的形式,很短小。 对偶跟对仗,这二者,一个是修辞格,一个是写作手段,是运用在不同的文体当中的,在古代的散文中也常常用到对偶的。格律诗本身的关于对偶方面的要求很严格也很特殊,所以,在格律诗的语言中,不能说是“对偶”,而单独称之为“对仗”。 在前面介绍格律诗格律的时候,介绍过,律诗的中间两联要求使用“对仗”的形式。律诗(七律、五律)的起联和尾联可以不用对仗,中间两联一般是要求必须要对仗的。律诗的美学特点是工稳、典雅、精练,其实更多的是通过这种“对仗”的形式来表现出来的。所以,律诗是离不开对仗的。全篇无对仗的(特例除外),我们就可以断定它不能算律诗。格律诗的基础就是对仗,不懂对仗的人,肯定谈不上懂的格律诗。 对联(对子)是从律诗演化出来的,也是律句。不仅出句和对句的词性要相同及平仄要相对,而且其平仄分布的规律也是和格律诗所要求的一样。比如,对联就不允许三平尾,就不允许孤平的存在。还有,对联要求的也是古韵,也是以我们所说的以《平水韵》为主体,为默认韵。更重要的一点是,对联所能表达的境界极其有限,它可以表达一个片段,一个闪念,一个景致或情思,但是,终究是属于“片面”的,和诗比较而言,缺乏的是完整感和大局观。它属于一种“小巧”的工夫,做为一般游戏应和是可以的,也很适合即景而联。如果熟练了格律诗的谋篇布局以及造境界的手段和诗思,那么,吟联应对那是举手之劳,轻松的很。楹联具有独立性,也是一个专门的“学问”,但是它的基础还是格律诗的基础,如果不懂格律诗,说句实在的,你的楹联也玩不出高水平来。不精通格律诗的楹联写手,是称不上“高手”二字的。 例如毛主席在《改造我们的学习》中,所举的一副对子: 墙上芦苇,头重脚轻根底浅;山间竹笋,嘴尖皮厚腹中空。 这里上联(出句)的字和下联(对句)的字不相重复,而它们的平仄则是相对立的: 仄仄平平,仄仄平平平仄仄;平平仄仄,平平仄仄仄平平。 就修辞方面说,这副对子也是对得很工整的。“墙上”是名词带方位词,所对的“山间”也是名词带方位词。“根底”是名词带方位词,所对的“腹中”也是名词带方位词。“头”对“嘴”,“脚”对“皮”,都是名词对名词。“重”对“尖”,“轻”对“厚”,都是形容

用栈和队列判断回文

实验二栈和队列 一、实验目的 1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。 2、掌握栈和队列的特点,即后进先出和先进先出的原则。 3、掌握栈和队列的基本运算,如:入栈与出栈,入队与出队 等运算在顺序存储结构和链式存储结构上的实现。 二、实验内容 1.请简述栈的基本特性和栈的几种基本操作的机制 栈是限定仅在表位进行插入或删除操作的线性表,栈的修改是按照后进先出的原则进行的,根据这种特性进行回文判断。 [问题描述] 对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如“abba”是回文,而“abab”不是回文。 [基本要求] (1)数据从键盘读入; (2)输出要判断的字符串; (3)利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“该字符串是回文”,否则输出“该字符串不是回文”。 [测试数据] 由学生任意指定。 2.设计简单的程序实现用栈判断回文 #include #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10

typedef struct{ char *base; char *top; int stacksize; }SqStack; void InitStack(SqStack &S){ S.base =(char *)malloc(STACK_INIT_SIZE * sizeof(char)); if(!S.base)exit(0); S.top = S.base; S.stacksize = STACK_INIT_SIZE; } void Push(SqStack &S,char e){ if(S.top - S.base >= S.stacksize){ S.base = (char *) realloc (S.base,(S.stacksize + STACKINCREMENT) * sizeof(char)); if(!S.base) printf("存储分配失败!"); S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *S.top++ = e; } char Pop(SqStack &S,char &e){ if(S.top == S.base) { printf("该栈为空!"); printf("\n"); e = 'E'; }else{ e = *--S.top;

山环水绕回文诗

山环水绕回文诗 山环水绕回文诗 回文,也写作“回纹”、“回环”。它是汉语特有的一种使用词序回环往复的修辞方法,文体上称之为“回文体”。唐代上官仪说,“诗有八对”,其七曰“回文对”,“情新因意得,意得逐情新”,用的就是这种措词方法。充分展示并利用了汉语以单音节语素为主和以语序为重要语法手段这两大特点,读来回环往复,绵延无尽,给人以荡气回肠,意兴盎然的美感。回文的形式在晋代以后就很盛行,而且在多种文体中被采用。人们用这种手法造句、写诗、填词、度曲,便分别称为回文,文诗,回文词和回文曲。虽然不乏游戏之作,却也颇见遣词造句的功力。 回文诗是一种按一定法则将字词排列成文,回环往复都能诵读的诗。这种诗的形式变化无穷,非常活泼。能上下颠倒读,能顺读倒读,能斜读,能交互读。只要循着规律读,都能读成优美的诗篇。正如清人朱存孝说的:“诗体不一,而回文优异。” 回文诗是我国古典诗歌中一种较为独特的体裁。回文诗据唐代吴兢《乐府古题要解》的释义是:“回文诗,回复读之,皆歌而成文也。” 回文诗在创作手法上,突出地继承了诗反复咏叹的艺术特色,来达到其“言志述事”的目的,产生强烈的回环叠咏的艺术效果。有人曾把回文诗当成一种文字游戏,实际上,这是对回文诗的误解。刘坡公《学诗百法》言:“回文诗反复成章,钩心斗角,不得以小道而轻之。” 回文诗的创作由来以久。现在可见到的回文诗,以苏伯玉妻《盘中诗》为最早.。「旧说以温峤和苏蕙诗为最早,实为谬误。温峤为东晋元帝(317-320)时人;苏蕙为苻秦时人(公元351年苻秦建国);苏伯玉妻为西晋初年人;故应以苏伯玉妻为最早。」 自西晋以来,历代诗家争相仿效,在回文诗的创作上各擅胜场,名领风骚。如庚信、白居易、王安石、苏轼、黄庭坚、秦观、高启、汤显祖等,均有回文诗传世。经过历代诗人的开发与创新,回文诗出现了千姿百态的形式:有连环回文体、藏头拆字体、叠字回文体、借字回文体、诗词双回文体等等。 例一、《回文旋图诗》 开篷一棹远溪流,走上烟花踏径游。来客仙亭闲伴鹤,泛舟渔浦满飞鸥。 台映碧泉寒井冷,月明孤寺古林幽。回望四山观落日,偎林傍水绿悠悠。 可倒读为: 悠悠绿水傍林偎,日落观山四望回。幽林古寺孤明月,冷井寒泉碧映台。 鸥飞满浦渔舟泛,鹤伴闲亭仙客来。游径踏花烟上走,流溪远棹一篷开。 例二、明末浙江才女吴绛雪《四时山水诗》: 莺啼岸柳弄春晴夜月明, 香莲碧水动风凉夏日长, 秋江楚雁宿沙洲浅水流, 红炉透炭炙寒风御隆冬。 可读为: 春景诗(莺啼岸柳弄春晴夜月明) 莺啼岸柳弄春晴, 柳弄春晴夜月明。 明月夜晴春弄柳, 晴春弄柳岸啼莺。 夏景诗(香莲碧水动风凉夏日长)

回文序列判断(运用栈以及队列完成)

回文序列判断实验报告 系别:通信工程 班级: 0905班 学号: 18 号

1.实验目的:熟悉栈的各项操作 2.实验内容: 利用栈的操作完成读入的一个以@结尾的字符序列是否是回文序列的判断. 回文序列即正读与反读都一样的字符序列; 例如:123&321@是; 123&4321@、123&312@不是 算法思想:从键盘上读取一个字符,同时存储在顺序栈与链队列之中,直到字符序列的最后一个字符为@停止输入,因为要满足特定的要求:序列1&序列2,故设置夜歌标记量falg=1,判断输入的元素个数是否为奇数个,若为偶数个则令flag=0,若为奇数个继续判断栈的中间元素是否为&,若不是则令flag=0,若是,将栈和队列中的元素依次出列,判断是否相等,若不相等则令flag=0,最后将flag的值返回给主函数,若flag被修改为0说明不是回文序列,否则反之!! 判断回文序列的流程图: 3.实验感想与体会 通过本次的上机,对栈的各项基本操作都有了更好的掌握,同时明白了一些小的细节问题可能会影响到整个程序的正确的运行,本次的实验我通过了运用栈和队列,可以说对队列的一些基本的操作也得以了巩固和提高!更加体会到,自己写程序上机操作的重要性,它要比课本上学的要多得多! 4.附录(源代码及运行图) #include

#define MAX 100 typedef struct//栈结构体 { char e[MAX]; int top; }SeqStack; typedef struct NODE//队列结构体 { char d; struct NODE *next; }LinkQN; typedef struct//封装头指针为指针 { LinkQN *front; LinkQN *rear; }LinkQ; InitS(SeqStack *s)//初始化顺序栈 { s->top=-1; } int push(SeqStack *s,char ch)//入栈 { if(s->top==MAX-1) return(0); s->top++; s->e[s->top]=ch; return(1); } int pop(SeqStack *s,char *x)//出栈 { if(s->top==-1) return(0); *x=s->e[s->top]; s->top--; return(1); } void InitQ(LinkQ *q)//链队列初始化 { q->front=(LinkQN *)malloc(sizeof(LinkQN)); if(!q->front) { printf("分配空间失败!");

相关文档
最新文档