数据结构-题目2
2016-04-04 10:32
183 查看
/* 设从键盘输入一个整数序列a1,a2,...,an,试编程实现:当ai>0时,ai进队,当ai<0时,将队首元素出队,当ai=0时,输入结束。 要求将队列处理成环形队列,进队和出队操作单独编写算法,并在异常情况时(如队满)打印错误信息。 */ #include <iostream> #include <malloc.h> #include <cstdio> #define MaxSize 100 using namespace std; typedef int ElemType; typedef struct { ElemType data[MaxSize]; int front,rear; }SqQueue; //定义顺序队类型 bool enQueue(SqQueue *&q,ElemType e) //进队 { if((q->rear+1)%MaxSize==q->front) //队满上溢出 return false; q->rear=(q->rear+1)%MaxSize; q->data[q->rear]=e; return true; } bool deQueue(SqQueue *&q,ElemType &e) //出队,并输出 { if(q->front==q->rear) //队空下溢出 return false; q->front=(q->front+1)%MaxSize; e=q->data[q->front]; return true; } int main() { int a; ElemType e; SqQueue *q; q=(SqQueue *)malloc(sizeof(SqQueue)); q->front=q->rear=0; cout<<"请输入:"; while((cin>>a)&&a!=0) { if(a>0) { if(!enQueue(q,a)) { cout<<"队满,不能入队!"<<endl; break; } } else if(a<0) { if(!deQueue(q,e)) { cout<<"队空,下溢出!"<<endl; break; } cout<<"出队元素:"<<e<<endl; } cout<<"请输入:"; } return 0; }
运行结果:
/* 假设以I和O分别表示进栈和出栈操作,栈的初态和终态均为空,写一个程序判断所给操作序列是否合法。 假设被判定的操作序列已存入一维数组中。 */ #include <iostream> #include <malloc.h> #include <cstdio> #include <cstring> using namespace std; typedef char ElemType; typedef struct linknode { ElemType data; struct linknode *next; } LiStack; //定义链栈类型 void InitStack(LiStack *&s) //初始化链栈s { s=(LiStack *)malloc(sizeof(LiStack)); s->next=NULL; } bool StackEmpty(LiStack *s) //判断链栈s是否为空 { return (s->next==NULL); } void Push(LiStack *&s,ElemType e) //进栈 { LiStack *p; p=(LiStack *)malloc(sizeof(LiStack)); p->data=e; p->next=s->next; s->next=p; } bool Pop(LiStack *&s,ElemType &e) //出栈 { LiStack *p; if(s->next==NULL) return false; p=s->next; e=p->data; s->next=p->next; free(p); return true; } int judge(char c[],int n) { ElemType x; LiStack *s; InitStack(s); for(int i=0; i<n; i++) { if(c[i]=='I') Push(s,c[i]); else if(c[i]=='O') { if(StackEmpty(s)) return 0; else Pop(s,x); } } return (StackEmpty(s)); } int main() { ElemType a[10]; while(1) { cout<<"输入IO序列:"; gets(a); if(judge(a,strlen(a))) cout<<"序列合法!"<<endl; else cout<<"序列不合法!"<<endl; cout<<endl; } return 0; }
运行结果:
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)