我有c++源代码,怎么实现可视化操作啊
做汉诺塔的算法设计,我有源代码。但要求是用图形化显示汉诺塔移动过程。以前都是写完源代码直接编译就行了。没学过可视化。怎么办?难吗?...
做汉诺塔的算法设计,我有源代码。但要求是用图形化显示汉诺塔移动过程。
以前都是写完源代码直接编译就行了。没学过可视化。
怎么办?难吗? 展开
以前都是写完源代码直接编译就行了。没学过可视化。
怎么办?难吗? 展开
1个回答
2010-06-29
展开全部
#include"stdio.h"
#include"stdlib.h"
#include"process.h"
struct Node
{
int data;
struct Node *next;
}*head_A,*head_B,*head_C;
Node *Init_List()//创建链表函数;
{
Node *head,*p,*s;
int x,i;
head=(struct Node *)malloc(sizeof(struct Node));
p=head;
for(i=1;i<6;i++)
{
s=(struct Node *)malloc(sizeof(struct Node));
if(s==NULL) exit(1);
scanf("%d",&x);
s->data=x;
p->next=s;
p=s;
}
p->next=NULL;
return(head);
}
void Out_Put(Node *head)//输出链表函数;
{
Node *q;
q=head->next;
while(q!=NULL)
{
printf("%-3d",q->data);
q=q->next;
}
printf("\n");
}
void main()
{
struct Node *p,*q,*r;
head_C=(struct Node *)malloc(sizeof(struct Node));//创建C表头结点;
if(head_C==NULL) exit(1);
head_C->next=NULL;
printf("请输入5个依次递增的整数(作为A表元素):\n");
head_A=Init_List();//创建链表A;
printf("请输入5个依次递增的整数(作为B表元素):\n");
head_B=Init_List();//创建链表B;
/*--------输出单链表A--------*/
printf("A表元素依次是:");
Out_Put(head_A);
/*--------输出单链表B--------*/
printf("B表元素依次是:");
Out_Put(head_B);
/*--------创建单链表C--------*/
while(head_A->next!=NULL||head_B->next!=NULL)
{
p=head_A->next;//p始终指向A表头结点后面的第一个元素;
q=head_B->next;//q始终指向B表头结点后面的第一个元素;
r=head_C->next;//r始终指向C表头结点后面的第一个元素;
if((head_A->next!=NULL)&&(head_B->next!=NULL))
{
if((head_A->next!=NULL)&&(p->data<=q->data))
{
head_A->next=p->next;//从A表中删除P节点;
p->next=r;
head_C->next=p;//在C表的头部插入P节点;
}
else
{
head_B->next=q->next;//从B表中删除q节点;
q->next=r;
head_C->next=q;//在C表的头部插入q节点;
}
}
else if(head_A->next!=NULL&&head_B->next==NULL)//B表如果为空,则只进行把A表剩下元素插入C表;
{
head_A->next=p->next;
p->next=r;
head_C->next=p;
}
else //A表如果为空,则只进行把A表剩下元素插入C表;
{
head_B->next=q->next;
q->next=r;
head_C->next=q;
}
}
/*--------输出单链表C--------*/
printf("C表元素依次是:");
Out_Put(head_C);
}
#include"stdlib.h"
#include"process.h"
struct Node
{
int data;
struct Node *next;
}*head_A,*head_B,*head_C;
Node *Init_List()//创建链表函数;
{
Node *head,*p,*s;
int x,i;
head=(struct Node *)malloc(sizeof(struct Node));
p=head;
for(i=1;i<6;i++)
{
s=(struct Node *)malloc(sizeof(struct Node));
if(s==NULL) exit(1);
scanf("%d",&x);
s->data=x;
p->next=s;
p=s;
}
p->next=NULL;
return(head);
}
void Out_Put(Node *head)//输出链表函数;
{
Node *q;
q=head->next;
while(q!=NULL)
{
printf("%-3d",q->data);
q=q->next;
}
printf("\n");
}
void main()
{
struct Node *p,*q,*r;
head_C=(struct Node *)malloc(sizeof(struct Node));//创建C表头结点;
if(head_C==NULL) exit(1);
head_C->next=NULL;
printf("请输入5个依次递增的整数(作为A表元素):\n");
head_A=Init_List();//创建链表A;
printf("请输入5个依次递增的整数(作为B表元素):\n");
head_B=Init_List();//创建链表B;
/*--------输出单链表A--------*/
printf("A表元素依次是:");
Out_Put(head_A);
/*--------输出单链表B--------*/
printf("B表元素依次是:");
Out_Put(head_B);
/*--------创建单链表C--------*/
while(head_A->next!=NULL||head_B->next!=NULL)
{
p=head_A->next;//p始终指向A表头结点后面的第一个元素;
q=head_B->next;//q始终指向B表头结点后面的第一个元素;
r=head_C->next;//r始终指向C表头结点后面的第一个元素;
if((head_A->next!=NULL)&&(head_B->next!=NULL))
{
if((head_A->next!=NULL)&&(p->data<=q->data))
{
head_A->next=p->next;//从A表中删除P节点;
p->next=r;
head_C->next=p;//在C表的头部插入P节点;
}
else
{
head_B->next=q->next;//从B表中删除q节点;
q->next=r;
head_C->next=q;//在C表的头部插入q节点;
}
}
else if(head_A->next!=NULL&&head_B->next==NULL)//B表如果为空,则只进行把A表剩下元素插入C表;
{
head_A->next=p->next;
p->next=r;
head_C->next=p;
}
else //A表如果为空,则只进行把A表剩下元素插入C表;
{
head_B->next=q->next;
q->next=r;
head_C->next=q;
}
}
/*--------输出单链表C--------*/
printf("C表元素依次是:");
Out_Put(head_C);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询