数据结构中的一个c语言编程问题(急)

题目:设某机器表示的正整数不超过5位的十进制数。试采用顺序表表示任意长的正整数并设计计算两个正整数之和的程序

#include<iostream>
using namespace std;
struct Node{
char data;
Node *next;
};

void AddNewNodeBack(Node **pCur);//往前增加结点
void DestoryList(Node *pList);//头结点
bool Sum(Node **pResult,const Node *pListNum);//求两数字串链表和
inline bool IsNumber(char ch);//当前字符是否为数字 内联函数
void ShowList(Node *pList);
void Reverse(Node **pList);
int main(int argc,char*argv[]){
Node *pListResult=NULL;//保存结果的链表指针
Node *pListNum=NULL;//用户输入数字的链表指针
pListResult=new Node;
pListResult->data='0';//假设已经做了一次加法且结果为0;
pListResult->next=NULL;
char ch;
do{
ch=getchar();
if(ch=='#')
break;
else{
while(ch!='\n'){
if(IsNumber(ch)==false){
DestoryList(pListNum);//如果输入的不是数字则删除这之前的输入
pListNum=NULL;
ch=getchar();//要保证输入的是数字串
continue;//如果输入的不是数字则进入下一次输入
}
//向前添加结点
AddNewNodeBack(&pListNum);
pListNum->data=ch;
ch=getchar();
}
}
Sum(&pListResult,pListNum);//求和
DestoryList(pListNum);//释放数字链以便下一次输入
pListNum=NULL;//防止野指针
Reverse(&pListResult);//倒转一下链表为做下一次运算准备
}while(1);

Reverse(&pListResult);//再把结果倒转一次
ShowList(pListResult);
cout<<endl;
DestoryList(pListNum);//释放空间
DestoryList(pListResult);//释放空间
return 0;
//return EXIT_SUCCESS;
}
/* 向前添加结点*/
void AddNewNodeBack(Node **pCur){
Node *pNode=new Node;
if(pNode==NULL){
cout<<"alloc memory failed!\n";
exit(-1);
}
pNode->data='0';
pNode->next=*pCur;
*pCur=pNode;
}
void DestoryList(Node *pList){
Node *pCur=NULL,*pNode=NULL;
pCur=pList;//指向头结点;
if(pList!=NULL){//链表不为空则释放内存
while(pCur!=NULL){
pNode=pCur;
pCur=pCur->next;
delete pNode;
}
}
}
/*递归打印链表*/
void ShowList(Node *pList){
if(pList!=NULL){
cout<<pList->data;
if(pList->next!=NULL)
ShowList(pList->next);
}
}
bool Sum(Node **pResult,const Node *pListNum){
if(*pResult==NULL)
return false;//返回失败
if(pListNum==NULL)
return false;//返回失败
int flag=0;//进位标志;
Node *pListResult=*pResult;
Node *pTempCur;
pTempCur=NULL;
char a=0,b=0;
while(*pResult!=NULL||pListNum!=NULL){//当两个链表都读完了,既做完了运算才退出循环
if(*pResult==NULL)
a=0;
else
a=(*pResult)->data-'0';
if(pListNum==NULL)
b=0;
else
b=pListNum->data-'0';
AddNewNodeBack(&pTempCur);//添加一个结点保存当前位的运算结果
pTempCur->data=a+b+flag+'0';
if(pTempCur->data-'0'>=10){//如果有进位
pTempCur->data-=10;
flag=1;
}else
flag=0;
if((*pResult)!=NULL)
*pResult=(*pResult)->next;//往下读
else
(*pResult)=NULL;
if(pListNum!=NULL)
pListNum=pListNum->next;
else
pListNum=NULL;
}
if(flag==1){//如果两个串链运算有进位
AddNewNodeBack(&pTempCur);
pTempCur->data='1';
}
DestoryList(*pResult);//释放掉上次的运算结果
*pResult=pTempCur;
return true;

}

inline bool IsNumber(char ch){
if('0'<=ch&&ch<='9')
return true;
else
return false;
}
void Reverse(Node **pList){
Node *pCur=NULL;
Node *pTemp=*pList;
while(*pList!=NULL){
AddNewNodeBack(&pCur);
pCur->data=(*pList)->data;
*(pList)=(*pList)->next;
}
DestoryList(*pList);
*pList=pCur;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-03-13
我不会呢

用C语言编程,数据结构题 要快!答的好再加更多悬赏
p=L;j=0;while(p&&jnext;++j;} q= (link)malloc(sizeof(LNode));q->date=e;q->next=p->next;p->next=q;return 1;} \/\/\/ \/\/\/*显示数据*\/\/\/ \/\/\/ void show(link l){ link p; int j;p=l;j=0;printf("链表的值为:\\n");while(p->next){ printf("%d\\n",p->next...

一道数据结构(c语言描述)题,希望大佬帮我看看,萌新不会?
include "stdio.h"struct PLU{ double r,i;};PLU plu_add(PLU a,PLU b,char c){\/\/运算函数 PLU t;if(c=='+'){\/\/+ t.r=a.r+b.r;t.i=a.i+b.i;} else if(c=='-'){\/\/- t.r=a.r-b.r;t.i=a.i-b.i;} else if(c=='*'){\/\/ t.r=a.r*b.r-a.i*b.i...

数据结构c语言版一道题求解
include <stdio.h>#include <stdlib.h>typedef int DataType; struct SeqList{ int MAXNUM; \/* 顺序表中最大元素的个数*\/ int n; \/* 存放线性表中元素的个数n≤MAXNUM *\/ DataType *element; \/* element[0],element[1],…,element[n - 1]存放线性表中的元素 ...

关于数据结构的问题,用C语言描述
1.设一函数f(x,y)=(1+A*(e^B\/cosθ)*(1+C*(cosψ)^2),其中θ=(π*x)\/180,ψ=(π*y)\/180,参数A=-0.5,B=-0.4,C=-0.1。x从0变化到89,步长为1,y从0变化到359,步长为1。采用一种数据结... 1. 设一函数 f(x,y)=(1+A*(e^B\/cosθ)*(1+C*(cosψ)^2),其中θ=(π*x)\/18...

C语言数据结构的一个基本问题
1.由于()运算符此时最高所以先算 (int*)array + i*column + j 2. 由于()这里是(数据类型)强制转换运算符运算符此时最高所以先算 (int*)array 3.以下表达式中*运算符(指针运算符)此时级别最高所以取出array指向的内存空间 由于这里的array已经在上一步中强制转换为int*类型了所以*array就...

关于数据结构(C语言版)的两个问题
如果不为空则弹出栈顶元素,将`top`减一。在遍历结束后,检查`stack`是否为空。如果为空,表示所有括号均匹配,返回1;否则表示存在未匹配的括号,返回0。通过上述程序,可以实现对给定字符串中括号匹配性的判断,对于数据结构(C语言版)中的括号匹配问题,此方法提供了一种简洁、高效的解决方案。

一个有关C语言(数据结构)程序设计题 高手请帮忙,高分!
front=(front+1)%QUEUE_SIZE;} public:int *base;int front;int rear;};\/\/图G中查找元素c的位置 int Locate(MGraph G,char c){ for(int i=0;i<G.vexnum;i++)if(G.vexs[i]==c) return i;return -1;} \/\/创建无向网 void CreateUDN(MGraph &G){ int i,j,w,s1,s2;char a,...

c语言版 数据结构问题
1.找到结构的头(H)和尾(R)2.下面是伪代码 while(H在R之前) do begin if data_at[H]!=data_at[R] then return false;\/\/肯定不对称 H<-后继;R<-前驱;end;return true;时间复杂度O(strlen(s))既为表长

数据结构c语言版问题
按列为主序存放于一个连续的存储空间中 a[10,20]一列10个元素,那么a[6,2],2表示第三列(前面有0,1),前面两列就是20 第三列6个,得到20+6=26,开始地址为200,则200+26=226

求解数据结构c语言中串的问题
在C语言中处理字符串操作时,理解基础函数的用法至关重要。举例来说,如果字符串s1和m之间仅由一个'号分隔,而无空格存在,字符串长度则应为13。函数SubString(s1,8,5)的作用是从字符串s1的第8个字符开始,提取连续的5个字符,结果为"tuden"。函数index(s1,'u')则在字符串s1中搜索字符'u',若...

相似回答