长整数四则运算源代码数据结构

更新时间:2023-12-20 11:07:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

长整数四则运算源代码 数据结构

// 长整数四则运算.cpp : 定义控制台应用程序的入口点。 //

#include <stdafx.h> #include<cstdio> #include<cstring> #include<malloc.h> #include<conio.h> #include<stdlib.h>

#define LEN sizeof(struct Node) #define MAX 1000 #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define TRUE 1 #define FALSE 0 typedef int Status; typedef struct Node {

int data;

struct Node *prior,*next; }Node,*NodeList;

//================================================================================ //求指数函数值 int axp(int a,int k) {

int r=1; if(k==0) return 1;

for(;k>0;k--) r=r*a; return r; }

//输入转换函数

Status conversion(char str[],NodeList &oprh) {//将字符串形式的操作数转换成所需的类型

输入模块NodeList p; int i,k,buffer; k=buffer=0;

oprh=(NodeList)malloc(LEN); oprh->next=oprh; oprh->prior=oprh;

for(i=strlen(str)-1;i>=0;i--) {

//若输入的数不合法就返回重新输入 if((i!=0 || (str[0]!='-' str[0]!='+'))&&(str[i]>'9' str[i]<'0')) return ERROR;

if(str[0]=='0' && str[1]!='\\0') return ERROR;

if((str[0]=='-' || str[0]=='+') str[1]=='0') return ERROR;

if(str[i]!='-' && str[i]!='+') {

buffer=buffer+(str[i]-'0')*axp(10,k); k++;

if(k==4 || str[i-1]=='-' || str[i-1]=='+' || i==0) {//将新建结点插入到头结点之后 p=(NodeList)malloc(LEN); oprh->next->prior=p; p->prior=oprh;

p->next=oprh->next; oprh->next=p; p->data=buffer; buffer=k=0; } } }

if(str[0]=='-')

oprh->data='-'; else

oprh->data='+'; return OK; }

//输入函数

Status input(NodeList &opr1,NodeList &opr2,char str[]) {

&&

||

&&

int flag=OK;

printf("\\n请输入第一个操作数:\\n"); scanf("%s",str); getchar();

flag=conversion(str,opr1); while(!flag) {

printf("ERROR!Input again:\\n"); scanf("%s",str); getchar();

flag=conversion(str,opr1); }

printf("\\n请输入第二个操作数:\\n"); scanf("%s",str); getchar();

flag=conversion(str,opr2); while(!flag) {

printf("ERROR!Input again:\\n"); scanf("%s",str); getchar();

flag=conversion(str,opr2); }

return OK; }

//========================================================================================

//=======================================输出模块========================================= //输出函数

Status output(NodeList oprr,char str[]) {

Status initbuf(char str[]); NodeList p; int i,j,num[4]; if(!oprr)

return ERROR; p=oprr; i=j=0;

initbuf(str);

if(oprr->data=='-')

str[i++]='-'; p=p->next;

if(p->next==oprr && p->data==0)//若要输出的数为0则执行 str[i++]='0'; else

while(p!=oprr) {

num[0]=p->data/1000;

num[1]=(p->data-num[0]*1000)/100;

num[2]=(p->data-num[0]*1000-num[1]*100)/10; num[3]=

p->data-num[0]*1000-num[1]*100-num[2]*10; while(j<4) {

if(num[j]!=0 || (str[0]=='-' && str[1]!='\\0')||(str[0]!='-' && str[0]!='\\0')) //此判断语句是为了避免输出诸如:00123…的情况 str[i++]=num[j]+'0'; j++; }

p=p->next; j=0; }

str[i]='\\0';

printf("%s",str); printf("\\n"); return OK; }

//========================================================================================

//==================================预处理及杂项操作模块==================================

//缓冲区部分初始化函数 Status initbuf(char str[]) { int i;

for(i=0;i<=10;i++) str[i]='\\0';

return OK; }

//比较链表长度函数

int cmplinklen(NodeList opr1,NodeList opr2)

{//opr1链比opr2链长则返回1,短则返回-1,否则返回0 NodeList p1,p2; p1=opr1->prior; p2=opr2->prior;

while(p1->prior!=opr1 && p2->prior!=opr2) {

p1=p1->prior; p2=p2->prior; }

if(p1->prior!=opr1) return 1;

if(p2->prior!=opr2) return -1; return 0; }

//求链表长度

int length(NodeList oprr) {

int count=0;

NodeList p=oprr->next; while(p!=oprr) {

count++;

p=p->next; }

return count; }

//生成指定长度链表

Status Creat(NodeList &oprr,int len) {

NodeList p;

oprr=(NodeList)malloc(LEN); p=oprr;

while(len>0) {

p->next=(NodeList)malloc(LEN); p->next->data='?';

本文来源:https://www.bwwdw.com/article/8xw5.html

Top