return FALSE; }
void conversion10_8( )
{ /* 对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数*/ SqStack s;
unsigned n; /* 非负整数*/ SElemType e;
InitStack(s); /* 初始化栈*/ printf(\;
scanf(\; /* 输入非负十进制整数n */ while(n) /* 当n 不等于0 */ {
n= n%8 ; /* 入栈n 除以8 的余数(8 进制的低位) */ S.base =n ; }
while(!StackEmpty(s)) /* 当栈不空*/ {
e*=S.top ; /* 弹出栈顶元素且赋值给e */ printf(\; /* 输出e */ }
printf(\; }
3.在SqStackUse.cpp 文件中,测试算法的调用,其中间接调用了顺序栈的其他基本算法。
typedef int SElemType; /* 定义栈元素类型为整型*/
#include \常量定义与系统函数原型声明,与实验一中的相同*/ #include \采用顺序栈的类型定义*/ #include \利用顺序栈的基本操作*/ void main()
{ conversion10_8(); /* 十进制数到八进制转换的验证*/ }
运行结果:
请将运行结果粘贴在此处
二、链式队列,利用队列的链式存储结构,设计一组输入数据(假定为一组整数),能够对链式队列进行如下操作:
. 初始化一个空队列,形成一个带表头结点的空队; . 完成一个元素的入队操作,修改队尾指针; . 完成一个元素的出队操作,修改队头指针;
1.文件LinkQueue.h 中实现单链队列--队列的链式存储结构的表示。 typedef struct QNode {
QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct {
QueuePtr front,rear; /* 队头、队尾指针*/ }LinkQueue;
2.文件LinkQueueAlgo.h 中实现的链队列的基本算法,其存储结构由LinkQueueDef.h 定义。
Status InitQueue(LinkQueue &Q) { /* 构造一个空队列Q */
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); if(!Q.front)
exit(OVERFLOW); Q.front->next=NULL; return OK; }
int QueueLength(LinkQueue Q) { /* 求队列的长度*/ int i=0; QueuePtr p; p=Q.front;
while(Q.rear!=p) { i++; p=p->next; } return i; }
Status EnQueue(LinkQueue &Q,QElemType e) { /* 插入元素e 为Q 的新的队尾元素*/
QueuePtr p=(QueuePtr)malloc(sizeof(QNode)); if(!p) /* 存储分配失败*/ exit(OVERFLOW); p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p; return OK; }
Status DeQueue(LinkQueue &Q,QElemType &e)
{ /* 若队列不空,删除Q 的队头元素,用e 返回其值,并返回OK,否则返回ERROR */ QueuePtr p; if(Q.front==Q.rear) return ERROR; p=Q.front->next; e= p->data;
Q.front->next=p->next; if(Q.rear==p) Q.rear=Q.front; free(p); return OK; }
3.文件LinkQueueUse.cpp 中包含检验LinkQueueAlgo.h 中关于链式队列基本操作的声明、测试数据和主函数。
#include \与实验一的意义相同*/
typedef int QElemType; /* 假设链式队列中的结点是一组整数*/ #include \
#include \void main()
编写主函数,验证上面的函数。 { }
运行结果:
请将运行结果 粘贴在此处
相关推荐: