将整数的各位数分解到一个动态生成的单向链表中,再将单向链接中的元素按降序排序,输出各位数及各位数字之和。(有一个间隔排序没思路)
代码如下:
#include<iostream>
#include<iomanip>
using namespace std;
struct NumberSave
{
int data;
NumberSave *next;
};
NumberSave * CreateList(int m)
{
int x = m;
int b = 0;
int n = 1;
NumberSave *head = NULL,*temp=NULL;
while (x)
{
b = x % 10;
if (n == 1)
{
head = new NumberSave;
if (head != NULL)
{
head->data = b;
head->next = NULL;
temp = head;
}
n++;
}
else
{
NumberSave * p = new NumberSave;
if (p != NULL)
{
p->data = b;
p->next = NULL;
temp->next = p;
temp = p;
}
n++;
}
x = x / 10;
}
return head;
}
int lenList(NumberSave *head)
{
int sum = 0;
NumberSave *p = head;
if (head == NULL)
return 0;
while (p != NULL)
{
sum += 1;
p = p->next;
}
return sum;
}
void DescSort(NumberSave *head)
{
int temp, n, m;
NumberSave *put= head;
int len = lenList(put);
if (len == 0)
{
return;
}
for (int i = 0; i < len; i++)
{
put = head;
for (int j = i; j < len - 1; j++)
{
if (put->data < put->next->data)
{
int tmp = put->data;
put->data = put->next->data;
put->next->data = tmp;
}
put = put->next;
}
}
}
void output(NumberSave *head)
{
NumberSave *ListHead = head;
while (ListHead)
{
cout << ListHead->data;
ListHead=ListHead->next;
}
cout << endl;
}
void SingleSum(NumberSave *head)
{
int sum = 0;
NumberSave *put = head;
while (put)
{
sum += put->data;
put = put->next;
}
cout << "sum:" << sum;
cout << endl;
}
int main()
{
int n;
cout << "Input n:";
cin >> n;
NumberSave *head1 = NULL;
head1 = CreateList(n);
DescSort(head1);
SingleSum(head1);
output(head1);
return 0;
}