#include <iostream> #include <stdio.head> #include <stdlib.head> #include <string.head> #define ElemType int #define max 100 using namespace std; typedef struct node1 { ElemType data; struct node1 *next; }Node1,*LinkList;//链栈 typedef struct { ElemType *base; int top; }SqStack;//顺序栈 typedef struct node2 { ElemType data; struct node2 *next; }Node2,*LinkQueue; typedef struct node22 { LinkQueue front; LinkQueue rear; }*LinkList;//链队列 typedef struct { ElemType *base; int front,rear; }SqQueue;//顺序队列 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 //1.采用链式存储实现栈的初始化、入栈、出栈操作。 LinkList CreateStack()//创建栈 { LinkList top; top=NULL; return top; } bool StackEmpty(LinkList s)//判断栈是否为空,0代表空 { if(s==NULL) return 0; else return 1; } LinkList Pushead(LinkList s,int x)//入栈 { LinkList q,top=s; q=(LinkList)malloc(sizeof(Node1)); q->data=x; q->next=top; top=q; return top; } LinkList Pop(LinkList s,int &e)//出栈 { if(!StackEmpty(s)) { printf("栈为空。"); } else { e=s->data; LinkList p=s; s=s->next; free(p); } return s; } void DisplayStack(LinkList s)//遍历输出栈中元素 { if(!StackEmpty(s)) printf("栈为空。"); else { wheadile(s!=NULL) { cout<<s->data<<" "; s=s->next; } cout<<endl; } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 //2.采用顺序存储实现栈的初始化、入栈、出栈操作。 int StackEmpty(int t)//判断栈S是否为空 { SqStack.top=t; if (SqStack.top==0) return 0; else return 1; } int InitStack() { SqStack.top=0; return SqStack.top; } int pushead(int t,int e) { SqStack.top=t; SqStack.base[++SqStack.top]=e; return SqStack.top; } int pop(int t,int *e)//出栈 { SqStack.top=t; if(!StackEmpty(SqStack.top)) { printf("栈为空."); return SqStack.top; } *e=SqStack.base[s.top]; SqStack.top--; return SqStack.top; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 //3.采用链式存储实现队列的初始化、入队、出队操作。 LinkList InitQueue()//创建 { LinkList head; head->rear=(LinkQueue)malloc(sizeof(Node)); head->front=head->rear; head->front->next=NULL; return head; } void deleteEle(LinkList head,int &e)//出队 { LinkQueue p; p=head->front->next; e=p->data; head->front->next=p->next; if(head->rear==p) head->rear=head->front; free(p); } void EnQueue(LinkList head,int e)//入队 { LinkQueue p=(LinkQueue)malloc(sizeof(Node)); p->data=e; p->next=NULL; head->rear->next=p; head->rear=p; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 //4.采用顺序存储实现循环队列的初始化、入队、出队操作。 bool InitQueue(SqQueue &head)//创建队列 { head.data=(int *)malloc(sizeof(int)); head.front=head.rear=0; return 1; } bool EnQueue(SqQueue &head,int e)//入队 { if((head.rear+1)%MAXQSIZE==head.front) { printf("队列已满\n"); return 0; } head.data[head.rear]=e; head.rear=(head.rear+1)%MAXQSIZE; return 1; } int QueueLengthead(SqQueue &head)//返回队列长度 { return (head.rear-head.front+MAXQSIZE)%MAXQSIZE; } bool deleteEle(SqQueue &head,int &e)//出队 { if(head.front==head.rear) { cout<<"队列为空!"<<endl; return 0; } e=head.data[head.front]; head.front=(head.front+1)%MAXQSIZE; return 1; } int gethead(SqQueue head)//得到队列头元素 { return head.data[head.front]; } int QueueEmpty(SqQueue head)//判断队列是否为空 { if (head.front==head.rear) return 1; else return 0; } void travelQueue(SqQueue head)//遍历输出 { wheadile(head.front!=head.rear) { printf("%d ",head.data[head.front]); head.front=(head.front+1)%MAXQSIZE; } cout<<endl; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 //5.在主函数中设计一个简单的菜单,分别测试上述算法。 int main() { LinkList top=CreateStack(); int x; wheadile(scanf("%d",&x)!=-1) { top=Pushead(top,x); } int e; wheadile(StackEmpty(top)) { top=Pop(top,e); printf("%d ",e); }//以上是链栈的测试 int top=InitStack(); int x; wheadile(cin>>x) top=pushead(top,x); int e; wheadile(StackEmpty(top)) { top=pop(top,&e); printf("%d ",e); }//以上是顺序栈的测试 LinkList Q; Q=InitQueue(); int x; wheadile(scanf("%d",&x)!=-1) { EnQueue(Q,x); } int e; wheadile(Q) { deleteEle(Q,e); printf("%d ",e); }//以上是链队列的测试 SqQueue Q1; InitQueue(Q1); int x; wheadile(scanf("%d",&x)!=-1) { EnQueue(Q1,x); } int e; wheadile(QueueEmpty(Q1)) { deleteEle(Q1,e); printf("%d ",e); } return 0; }
上传时间: 2018-05-09
上传用户:123456..
实现一个Java版的PL0编译器。 (1) 能运行由《编译原理》教材中定义的PL0语言编写而成的源程序 (2) 参考C版源代码,遵循编译器的基本结构,应用面向对象软件设计方法重新实现。不应仅对C版代码作简单的翻译。 (3) 提供简单的断点、单步调试功能,用户能实时指定并查看某个变量的值 (4) 包括测试例子 直接运行jar文件 简单说明文档
上传时间: 2018-05-13
上传用户:aloger
处理关键字、运算符和界符、标识符和整形常数、空格。处理关键字、运算符和界符、标识符和整形常数、空格。
标签: 分析器
上传时间: 2018-05-22
上传用户:lingyi
LM3875文档,详细的描述更有利于他人下载,以获取更多积分
上传时间: 2018-05-29
上传用户:秋春弟1
AN7148文档资料详细的描述更有利于他人下载
上传时间: 2018-05-29
上传用户:秋春弟1
S7300-400梯形图编程手册 S7300-400梯形图编程手册 S7300-400梯形图编程手册 S7300-400梯形图编程手册 S7300-400梯形图编程手册
上传时间: 2018-05-30
上传用户:nanshan961
FANUC PMC 梯形图语言编程说明书 FANUC PMC 梯形图语言编程说明书 FANUC PMC 梯形图语言编程说明书 FANUC PMC 梯形图语言编程说明书 FANUC PMC 梯形图语言编程说明书
上传时间: 2018-05-30
上传用户:nanshan961
《基于FPGA的嵌入式图像处理系统设计》详细介绍了FPGA(Field Programmable Gate Array,现场可编程门阵列)这种新型可编程电子器件的特点,对FPGA的各种编程语言的发展历程进行了回顾,并针对嵌入式图像处理系统的特点和应用背景,详细介绍了如何利用FPGA的硬件并行性特点研制开发高性能嵌入式图像处理系统。作者还结合自己的经验,介绍了研制开发基于FPGA的嵌入式图像处理系统所需要的正确思路以及许多实用性技巧,并给出了许多图像处理算法在FPGA上的具体实现方法以及多个基于FPGA实现嵌入式图像处理系统的应用实例。 《基于FPGA的嵌入式图像处理系统设计》对FPGA技术的初学者以及已经具有比较丰富的设计经验的读者来说都有很好的参考价值,也将为从事基于FPGA的嵌入式系统开发和应用的软硬件工程师和科研人员提供一本比较系统、全面的学习材料。
标签: fpga
上传时间: 2018-06-19
上传用户:gsl13
死锁避免演示算法。 本实验是基于银行家算法的思想通过编写C++程序实现银行家算法的计算机程序化,使其更实用。
上传时间: 2018-06-20
上传用户:薛大神6
使用手册《电气技术用文件的编制(第5部分):索引(GB/T 6988.5-2006)(IEC 61082-6:1997)》由全国电气信息结构、文件编制和图形符号标准化技术委员会提出并归口。本部分起草单位:机械科学研究院中机生产力促进中心、航空总公司301所、国电华北电力设计院工程有限公司、中冶京诚工程技术有限公司、凌海科诚电力电器制造有限责任公司、辽宁立德电力电子有限公司。本部分主要起草人:郭汀、高永梅、沈兵、高惠民、曾幼云、王健斌、张玉良、王春海。
标签: EPLAN
上传时间: 2018-06-27
上传用户:454545