分别用顺序表和单链表的存储形式实现将输入的两个大整数(超过20位)

发布网友 发布时间:2022-04-25 00:41

我来回答

2个回答

热心网友 时间:2023-10-18 01:30

具体代码如下:
#include<stdio.h>
#include<stdlib.h>
#define MAX 80

typedef struct node
{
int data;
struct node *next;
}N;

N *head=(N *)malloc(sizeof(N));//创建头结点

void Creat()
{
N *p;//用于插入新节点
N *r=head;//尾指针 开始指向头结点

printf("请输入任意个数据(用回车结束输入、空格间隔:1 2 3……)\n:");
do{
p=(N *)malloc(sizeof(N));
scanf("%d",&p->data);
r->next=p;
r=p;
}while(getchar()!='\n');

r->next=NULL;
}

void Disp()//实现顺序输出和逆序输出
{
N *p=head->next;//用于遍历单链表
int a[MAX];
int i=0,j;

printf("顺序输出:\n");
while(p)
{
printf("%d ",p->data);
a[i]=p->data;
p=p->next;
i++;
}
printf("\n逆序输出:\n");
for(j=i-1;j>=0;j--)
printf("%d ",a[j]);
printf("\n");
}
void main()
{
Creat();
Disp();
}

热心网友 时间:2023-10-18 01:31

#include"stdio.h"#include"string.h"#include#defineMax20//结点的最大个数typedefstructnode{chardata;structnode*lchild,*rchild;}BinTNode;//自定义二叉树的结点类型typedefBinTNode*BinTree;//定义二叉树的指针intNodeNum,leaf;//NodeNum为结点数,leaf为叶子数//==========基于先序遍历算法创建二叉树==============//=====要求输入先序序列,其中加入虚结点"#"以示空指针的位置==========BinTreeCreatBinTree(void){BinTreeT;charch;if((ch=getchar())=='#')return(NULL);//读入#,返回空指针else{T=(BinTNode*)malloc(sizeof(BinTNode));//生成结点T->data=ch;T->lchild=CreatBinTree();//构造左子树T->rchild=CreatBinTree();//构造右子树return(T);}}//========NLR先序遍历=============voidPreorder(BinTreeT){if(T){printf("%c",T->data);//访问结点Preorder(T->lchild);//先序遍历左子树Preorder(T->rchild);//先序遍历右子树}}//========LNR中序遍历===============voidInorder(BinTreeT){if(T){Inorder(T->lchild);printf("%c",T->data);Inorder(T->rchild);}}//==========LRN后序遍历============voidPostorder(BinTreeT){if(T){Postorder(T->lchild);Postorder(T->rchild);printf("%c",T->data);}}//=====采用后序遍历求二叉树的深度、结点数及叶子数的递归算法========inthl,hr,max;TreeDepth(BinTreeT){if(T){hl=TreeDepth(T->lchild);//求左深度hr=TreeDepth(T->rchild);//求右深度max=hl>hr?hl:hr;//取左右深度的最大值NodeNum=NodeNum+1;//求结点数if(hl==0&&hr==0)leaf=leaf+1;//若左右深度为0,即为叶子。return(max+1);}elsereturn(0);}//====利用"先进先出"(FIFO)队列,按层次遍历二叉树==========voidLevelorder(BinTreeT){intfront=0,rear=1;BinTNode*cq[Max],*p;//定义结点的指针数组cqcq[1]=T;//根入队while(front!=rear){front=(front+1)%NodeNum;p=cq[front];//出队printf("%c",p->data);//出队,输出结点的值if(p->lchild!=NULL){rear=(rear+1)%NodeNum;cq[rear]=p->lchild;//左子树入队}if(p->rchild!=NULL){rear=(rear+1)%NodeNum;cq[rear]=p->rchild;//右子树入队}}}//==========主函数=================voidmain(){BinTreeroot;inti,depth;printf("\n");printf("CreatBin_Tree;Inputpreorder:");//输入完全二叉树的先序序列,//用#代表虚结点,如ABD###CE##F##root=CreatBinTree();//创建二叉树,返回根结点do{//从菜单中选择遍历方式,输入序号。printf("\t**********select************\n");printf("\t1:PreorderTraversal\n");printf("\t2:IorderTraversal\n");printf("\t3:Postordertraversal\n");printf("\t4:PostTreeDepth,Nodenumber,Leafnumber\n");printf("\t5:LevelDepth\n");//按层次遍历之前,先选择4,求出该树的结点数。printf("\t0:Exit\n");printf("\t*******************************\n");scanf("%d",&i);//输入菜单序号(0-5)switch(i){case1:printf("PrintBin_treePreorder:");Preorder(root);//先序遍历break;case2:printf("PrintBin_TreeInorder:");Inorder(root);//中序遍历break;case3:printf("PrintBin_TreePostorder:");Postorder(root);//后序遍历break;case4:depth=TreeDepth(root);//求树的深度及叶子数printf("BinTreeDepth=%dBinTreeNodenumber=%d",depth,NodeNum);printf("BinTreeLeafnumber=%d",leaf);break;case5:printf("LevePrintBin_Tree:");Levelorder(root);//按层次遍历break;default:exit(1);}printf("\n");}while(i!=0);}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com