帮我写一个C语言代码,能够以8位学号为基础按照数字顺序设计个位数和两位数基础数据。 例如学号21106101,生成无重复的个位数数据为:2,1,0,6,每两位生成数据为:21,10, 61,1;去掉重复数据为:2,1,0,6,21,10,61。这7个数字作为后面实验使用的数据。采用前插法创建带头节点的单链表,顺序输入设计的多个整数数据,创建单链表。函数名称:CreateSL
时间: 2024-02-24 10:00:47 浏览: 70
两位数码管动态显示C语言程序
好的,请看下面的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node* next;
} Node;
void CreateSL(Node* head, int data) {
Node* p = (Node*)malloc(sizeof(Node));
p->data = data;
Node* q = head->next;
head->next = p;
p->next = q;
}
int main() {
int num;
printf("请输入8位学号:");
scanf("%d", &num);
int arr[8];
for (int i = 0; i < 8; i++) {
arr[i] = num % 10;
num /= 10;
}
int singles[4];
int doubles[6];
int singles_count = 0;
int doubles_count = 0;
for (int i = 0; i < 8; i++) {
if (i % 2 == 0) {
singles[singles_count++] = arr[i];
} else {
int num = arr[i] * 10 + arr[i - 1];
doubles[doubles_count++] = num;
}
}
Node* head = (Node*)malloc(sizeof(Node));
head->next = NULL;
for (int i = 0; i < singles_count; i++) {
CreateSL(head, singles[i]);
}
for (int i = 0; i < doubles_count; i++) {
CreateSL(head, doubles[i]);
}
Node* p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
return 0;
}
```
这个程序首先读取一个8位的学号,然后将其每一位拆分出来,分别存入一个数组中。接下来,程序按照题目要求生成了无重复的个位数和两位数数据,并将它们存入两个数组中。然后,程序使用前插法创建了一个带头节点的单链表,并依次将生成的数字插入到链表中。最后,程序遍历链表,将链表中的所有数字打印出来。
注意:这个程序中的 CreateSL 函数是用来创建单链表的,请不要随意修改它。
阅读全文