实验二 栈和队列
一、 实验目的
1.熟悉栈和队列的顺序和链式存储结构
2.掌握栈和队列的基本运算
3.能够利用栈和队列的基本运算完成栈和队列应用的运算
二、 实验内容
1.设单链表中存放有n个字符,试编写算法,判断该字符串是否有中心对称的关系,例如xyzzyx是中心对称的字符串。(提示:将单链表中的一半字符先依次进栈,然后依次出栈与单链表中的另一半字符进行比较。)(文件夹:习题10_3)
typedef char datatype;
/*定义单链表结构类型*/
typedef struct node
{ datatype data;
struct node *next;
}linklist;
/*定义顺序栈结构类型*/
/*const int maxsize=40;*/
#define maxsize 40
typedef struct
{ datatype elements[maxsize];
int top;
}stack;
#include <stdio.h>
#include <stdlib.h>
#include "Project_10_3.h"
int symmetry( linklist * head , stack * s );
int main(int argc, char *argv[])
{
linklist * head;
stack *s;
datatype str[80];
/*
cin>>str;
*/
gets(str);
head = creat(str);
printlink(head);
setnull(s);printf("%d/n",length(head));
/*
if(symmetry(head,s)) cout<<"字符串/""<<str<<"/"中心对称/n";
else cout<<"字符串/""<<str<<"/"不是中心对称/n";
*/
if(symmetry(head,s))printf("字符串/"%s/"中心对称./n",str);
else printf("字符串/"%s/"不是中心对称./n",str);
puts(str);
system("PAUSE");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include "Project_10_3.h"
/*建立具有头结点的单链表*/
linklist* creat( datatype * str )
{ datatype *p=str;
linklist * head ;
linklist *s,*r;
head =(linklist*)malloc(sizeof(linklist));
r=head;
while(*p!='/0')
{
s=(linklist*)malloc(sizeof(linklist));
s->data=*p;
r->next=s;
r=s;
p++;
}
r->next=NULL;
return head;
}
/*求单链表长度*/
int length(linklist*head)
{
linklist *p=head->next;
int n=0;
while(p!=NULL)
{
n++;
p=p->next;
}
return n;
}
/*输出单链表*/
void printlink(linklist*head)
{ linklist *p = head->next;
while(p!=NULL)
{
/* cout<<p->data;*/
printf("%c",p->data);
p=p->next;
}
/*cout<<endl;*/
printf("/n");
return;
}
#include <stdio.h>
#include <stdlib.h>
#include "Project_10_3.h"
/*置栈空*/
void setnull(stack *s)
{
/*s=new stack;*/
s = (stack*)malloc(sizeof(stack));
s->top=-1;
return;
}
/*顺序栈入栈.h*/
void push(stack*s,datatype e)
{
s->top++;
s->elements[s->top]=e;
return;
}
/*顺序栈出栈*/
datatype pop(stack*s)
{
datatype temp;
temp=s->elements[s->top];
s->top--;
return temp;
}
#include <stdio.h>
#include <stdlib.h>
#include "Project_10_3.h"
int symmetry(linklist*head,stack*s)
{
int n=length(head)/2;
linklist*p=head->next;
int i;
for(i=0;i<n;i++){
push(s,p->data);
p=p->next;
}
if(length(head)%2==1)p=p->next;
while(p!=NULL)
{
if(pop(s)==p->data)
{
p=p->next;continue;
}
else return 0;
}
return 1;
}
分享到:
相关推荐
数据结构作业做的一个简单的停车场管理系统,主要使用栈和队列来模拟停车场及便道的车辆停放情况解决停车位安排及收费问题
linux程序实验报告,数据结构(红黑树、堆、栈、二叉搜索树、队列、链表、图)的c代码实现+源代码+文档说明+实验报告 - 小白不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都测试...
适合大一,大二学生,数据结构期末作业带有顺序表+链表+顺序栈+链栈+顺序队列+链队+二叉树(先序遍历+中序遍历+后序遍历)带结构图
第4章 栈和队列 不同的结构类型 栈 队列 优先级队列 解析算术表达式 小结 问题 实验 编程作业 第5章 链表 链结点(Link) LinkList专题Applet 单链表 查找和删除指定链结点 双端链表 链表的效率 抽象数据类型 有序...
第4章 栈和队列 不同的结构类型 栈 队列 优先级队列 解析算术表达式 小结 问题 实验 编程作业 第5章 链表 链结点(Link) LinkList专题Applet 单链表 查找和删除指定链结点 双端链表 链表的效率 抽象...
实验3:栈和队列 1) 利用栈求解迷宫问题;行列各为10(包括外墙),迷宫内墙单元数为18。 2) 利用栈和递归求解Hanoi塔问题,圆盘数3。 3) 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径);行列各为5...
第一次数据结构实验作业 一、设计一个判断表达式中括号匹配问题的程序。要判断的表达式如下: ⑴ {a=(1+v(b[3+c[4]])) ⑵ {a=(b[0]+1);} ⑶ a={1+(b[2]-b[4])}*3+(b[1]-b[3])/5 要求: (1)表达式由屏幕输入; ...
第4章 栈和队列 不同的结构类型 栈 队列 优先级队列 解析算术表达式 小结 问题 实验 编程作业 第5章 链表 链结点(Link) LinkList专题Applet 单链表 查找和删除指定链结点 双端链表 链表的效率 ...
第4章 栈和队列 不同的结构类型 栈 队列 优先级队列 解析算术表达式 小结 问题 实验 编程作业 第5章 链表 链结点(Link) LinkList专题Applet 单链表 查找和删除指定链结点 双端链表 链表的效率 ...
计算机软件技术基础上机实验报告 学生姓名: 院(系):信息与控制工程学院 专业: 通信工程 任课教师: 时间:2012年5月21日 目录 一、上机实验一 线性数据结构 3 二、上机实验二 二叉树 9 三、上机实验三 查找与...
有三根柱子A、B、C,在柱子A上从下向上有n个从大到小的圆盘,在柱子B和C上没有圆盘,现需将柱子A上的所有圆盘移到柱子C上,可以借助柱子B,要求每次移动一个圆盘,每根柱子上的圆盘只能大的在下,小的在上。...