• 大小: 7KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: 其他
  • 标签: 数据结构  

资源简介

数据结构数据结构数据结构数据结构数据结构数据结构数据结构数据结构数据结构数据结构数据结构数据结构数据结构数据结构数据结构数据结构数据结构数据结构数据结构数据结构

资源截图

代码片段和文件信息

#include
#include 
#include
#include
typedef struct Node {
struct Node* prev;
char c;
struct Node* next;
}Node;

typedef struct {
struct Node* head;//指向头结点的指针
struct Node* rear;//指向尾结点的指针
int count;
}List;
void insert_List(List* char);
void Delete_List(List*);
void Calculate(List* List* int);
void print(List* char);
void clear_high_zero(List*);
int main() {
char c1[1000] c2[1000] sign1 sign2;
List num1 num2;
int temp = 0;
int i j;
bool flag = true;
Node *temp1 *temp2;
//初始化头尾结点以及头尾结点的指针
num1.head = (Node *)malloc(sizeof(Node));
num2.head = (Node *)malloc(sizeof(Node));
num1.rear = num1.head;
num1.head->next = NULL;
num1.head->prev = NULL;
num1.count = 0;
num2.rear = num2.head;
num2.head->next = NULL;
num2.head->prev = NULL;
num2.count = 0;


scanf(“%s%s“ &c1 &c2);
for (i = 0; i if (c1[i]<‘0‘ || c1[i]>‘9‘)
continue;
insert_List(&num1 c1[i]);
}
for (j = 0; j if (c2[j]<‘0‘ || c2[j]>‘9‘)
continue;
insert_List(&num2 c2[j]);
}
//用sign来储存正负号
sign1 = c1[0];
sign2 = c2[0];
if (sign2 != ‘+‘&&sign2 != ‘-‘) {
sign2 = ‘+‘;
}
if (sign1 != ‘+‘&&sign1 != ‘-‘) {
sign1 = ‘+‘;
}

//同号时的处理
if (sign1 == sign2) {
if (num1.count > num2.count) {
Calculate(&num1 &num2 1);
clear_high_zero(&num1);
print(&num1 sign2);
}
else {
Calculate(&num2 &num1 1);
clear_high_zero(&num2);
print(&num2 sign2);
}
}
//异号时的处理
else {
if (num1.count > num2.count) 
{
Calculate(&num1 &num2 -1);
clear_high_zero(&num1);
print(&num1 sign1);
}
else if(num1.count {
Calculate(&num2 &num1 -1);
clear_high_zero(&num2);
print(&num2 sign2);
}
//异号时还要特地去考虑两个数字长度相等时的问题
else {
flag = true;
//如果两个数字的长度相同,那么就把绝对值大的那个数放到
//Calculate()中的第一个参数中去
if (num1.count == num2.count) {
temp1 = num1.rear;
temp2 = num2.rear;
//一直比较,直到出现两个不一样的数字的时候传到下面的if中进行比较处理
while (temp1->c == temp2->c && (temp1 != num1.head || temp2 != num2.head)) {
temp1 = temp1->prev;
temp2 = temp2->prev;
}
if (temp1 != num1.head&&temp2 != num2.head) {
if (temp1->c > temp2->c)
flag = true;
else flag = false;
}
}
if (!flag) {
Calculate(&num2 &num1 -1);
clear_high_zero(&num2);
print(&num2 sign2);
}
else {
Calculate(&num1 &num2 -1);
clear_high_zero(&num1);
print(&num1 sign1);
}
}
}
}

//插入数字,倒置插入,指针head指向的永远是头结点,指针rear指向的永远是尾结点。
//数字在链表中的存储是倒序存储的例如当num1是1234时,
//实际上num1中的c的值的存储顺序是 空4321目的是为了方便后续的运算处理
//第一个结点的c值永远为空最后一个结点的next 的值始终为null
void insert_List(List *num char c) {
Node *p;
p = num->head->next;
num->head->next = (Node *)malloc(sizeof(Node));
num->head->next->c = c;
num->head->next->prev = num->head;
num->head->next->next = p;
if (p != NULL)
p->prev = num->head->nex

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5909  2017-12-03 00:08  shiyan2.cpp

     文件       1719  2017-12-06 16:24  shiyan3_xiugai.cpp

     文件       4510  2017-12-09 18:16  shiyan4_xiugai_ok.cpp

     文件       4060  2017-12-09 21:27  shiyan5.c

     文件       5054  2017-11-30 10:02  shiyan1_ok.cpp

----------- ---------  ---------- -----  ----

                21252                    5


评论

共有 条评论