当前位置:首页 > 数据结构栈和队列实验报告 - 图文
int main() {
int n;
scanf(\
printf(\的阶乘为:\ printf(\ return 0; }
运行结果如下:
2.2 哈诺塔: 代码如下:
#include
int Hanoi(int n,char a,char b,char c) {
if(1 == n)
printf(\
else{
Hanoi(n-1,a,c,b);
printf(\ Hanoi(n-1,b,a,c);
}
return 0; }
第 9 页 共 17 页
int main() {
int n;
char a='A',b='B',c='C'; printf(\请输入汉诺塔的层数: \ scanf(\ Hanoi(n,a,b,c); printf(\ return 0; }
运行结果如下: n=3时
n=4时
n=5时
n=6时
由3,4,5可推知n层哈诺塔需要移动 2?1次; n=6时,需要移动63次。
第 10 页 共 17 页
n3. 队列的出队和入队 代码如下:
#include
#define OK 1 #define ERROR 0
#define OVERFLOW -1
typedef char ElemType; //default ElemType = char typedef int Status; //Return Value
/*队列节点的申明*/
typedef struct node{ ElemType data;
struct node *next; }QNode,*QuePtr; /*链式队列*/
typedef struct{
QuePtr front; //队头指针
QuePtr rear; //队尾指针,指向队尾元素的下一位 }LinkQueue;
Status InitQueue(LinkQueue *q) //初始化队列 {
q->front = q->rear = (QuePtr)malloc(sizeof(QNode)); q->front->next = NULL; return OK; }
Status EnQueue(LinkQueue *q,ElemType e) //将元素e入队列 {
QuePtr temp = (QuePtr)malloc(sizeof(QNode)); //创建新结点 if(!temp) return OVERFLOW;
temp->data = e; //初始化新结点的数据为e
temp->next = NULL; //队列只能从队尾插入所以下一个结点初始化为NULL q->rear->next = temp;
第 11 页 共 17 页
q->rear = temp; //将指向队尾的指针指向新结点
return OK; }
Status CreateQueue(LinkQueue *q /*,char a[]*/) //创建队列 {
InitQueue(q); int k;
printf(\请输入队列元素个数:\ scanf(\
printf(\请输入队列元素: \\n\ for(int i=0;i scanf(\ EnQueue(q,a); } // for(int i=0;i return OK; } Status DeQueue(LinkQueue *q,ElemType *e) //队头的结点出队 { if(q->front == q->rear) return ERROR; QuePtr temp = q->front->next; //初始化temp为要出队的结点的指针 if(q->front->next == q->rear) q->rear = q->front; *e = temp->data; //将出队的数据元素存入*e q->front->next = temp->next; //下一个结点成为队头 free(temp); //删除要出队的结点 return OK; } bool IsEmpty(LinkQueue *q) //判断队列是否为空 { 第 12 页 共 17 页
共分享92篇相关文档