【问题描述】输入一个整数序列(整数大于0),以顺序表作为其存储结构,然后根据顺序表中的数据构建一个单链表,并保证单链表中的数据以非递减的方式排列,并输出单链表中的数据。(注意:在构建单链表的过程中,可以修改或者删除顺序表中的数据)
【输入形式】整数序列,以空格作为分隔,序列最多包含10个整数
【输出形式】整数序列,以空格作为分隔
【样例输入】9 10 2 1
【样例输出】1 2 9 10
num_str = str(input('输入字符串,字符串之间用逗号隔开:\n'))
num_list = num_str.split(',', -1)
num_list = set(num_list) #根据set函数特性去重
num_int_list = list(map(int, num_list))
print('去重后', num_int_list)
num_int_list.sort() #排序函数调用
print('排序后', num_int_list)
length = len(num_int_list)
n = 0
result = [] #结果放入到result列表中
while n < length-1:
if num_int_list[n] == num_int_list[n+1] - 1:
#star记录连续数字的开始下标
star = n
nums = num_int_list[star]
while (n+1<length and num_int_list[n] == num_int_list[n+1]-1):
n += 1
# end记录连续数字的末尾
end = n
#数字的末尾存入到nume
nume = num_int_list[end]
#将符合条件的连续数字的两段数字存入result
result.append(nums)
result.append(nume)
n += 1
else:
#将其余间断的数字直接存入result
gap = num_int_list[n]
result.append(gap)
n += 1
#判断n是否是最后一位数字,是则打印
if n == length-1:
last = num_int_list[n]
result.append(last)
print('最终结果', result)
又来啦,前面还有几个问题解决了吗?
你这还要定义一个顺序表结构?再定义一个链表结构?
#include <stdio.h>
#define MAXSIZE 10
typedef struct _sqlist
{
int data[MAXSIZE];
int len;
}sqlist;
typedef struct _node
{
int data;
struct _node *next;
}node;
void input(sqlist *sq)
{
int n;
do
{
scanf("%d",&n);
sq->data[sq->len++] = n;
}
while(getchar() !='\n');
}
void createlist(node *head,sqlist *sq)
{
node *p = head;
for(int i=0;i<sq->len;i++)
{
node *q = (node*)malloc(sizeof(node));
q->data = sq->data[i];
q->next = NULL;
p = head;
while(p->next != NULL)
{
if(p->next->data >= q->data)
{
q->next = p->next;
p->next = q;
break;
}
p = p->next;
}
if(p->next == NULL)
p->next = q;
}
}
void printlist(node *head)
{
node *p = head->next;
while(p != NULL)
{
printf("%d ",p->data);
p = p->next;
}
}
int main()
{
sqlist sq;
sq.len = 0;
input(&sq);
node head;
head.next = NULL;
createlist(&head,&sq);
printlist(&head);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!