int main() { int tmp; srand((unsigned)time(NULL)); int array[N]={0}; for(int i=0;i<N;i++){ array[i]=rand()%Limit; } for(int i=1;i<=N-1;i++){ for(int j=0;j<=N-1-i;j++){ if(array[j]>array[j+1]){ tmp=array[j]; array[j]=array[j+1]; array[j+1]=tmp; } } } for(int i=0;i<=N-1;i++){ printf("%d\t",array[i]); } printf("\n"); D* head,*p1,*p2; head=p2=p1=(D*)malloc(sizeof(D)); p1->num=array[0]; for(int i=1;i<=N-1;i++){ p1=(D*)malloc(sizeof(D)); p1->num=array[i]; p1->next=NULL; p2->next=p1; p2=p1; } p1=head; while(p1){ printf("%d %d\n",p1->num,p1->next); p1=p1->next; } p1=head; p2=p1->next; while(p2){ if(p1->num==p2->num){ p1->next=p2->next; p2=p2->next; } else { p1=p2; p2=p2->next; } } p1=head; while(p1){ printf("%d %d\n",p1->num,p1->next); p1=p1->next; } return 0; }为上述代码添加详细注释
时间: 2023-12-02 12:05:16 浏览: 67
yacc.rar_Creating_srand(getpid(0))_terrain
以下是对代码的详细注释:
```c++
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10 // 定义数组大小为10
#define Limit 100 // 定义随机数的取值范围
// 定义一个结构体,用于存储链表的每一个节点
typedef struct node{
int num; // 存储数据
struct node *next; // 存储下一个节点的地址
}D;
int main() {
int tmp; // 用于交换数据的临时变量
srand((unsigned)time(NULL)); // 用于生成随机数的种子
// 创建数组并初始化为0
int array[N]={0};
// 生成随机数并存储到数组中
for(int i=0;i<N;i++){
array[i]=rand()%Limit;
}
// 使用冒泡排序对数组进行排序(从小到大)
for(int i=1;i<=N-1;i++){
for(int j=0;j<=N-1-i;j++){
if(array[j]>array[j+1]){
tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
}
// 创建链表并将数组中的数据存储到链表中
D* head,*p1,*p2; // 定义头指针和两个辅助指针
head=p2=p1=(D*)malloc(sizeof(D)); // 分配内存并将三个指针都指向该节点
p1->num=array[0]; // 将数组中的第一个数存储到链表中
for(int i=1;i<=N-1;i++){
p1=(D*)malloc(sizeof(D)); // 分配内存
p1->num=array[i]; // 将数组中的数据存储到链表节点中
p1->next=NULL; // 将下一个节点的指针设置为NULL
p2->next=p1; // 将上一个节点的next指针指向当前节点
p2=p1; // p2指针指向当前节点
}
// 输出链表中的所有节点
p1=head; // 将p1指针指向头指针
while(p1){ // 遍历链表
printf("%d %d\n",p1->num,p1->next); // 输出当前节点的数据和下一个节点的地址
p1=p1->next; // p1指针指向下一个节点
}
// 删除链表中的重复数据
p1=head; // 将p1指针重新指向头指针
p2=p1->next; // 将p2指针指向第二个节点
while(p2){ // 遍历链表
if(p1->num==p2->num){ // 如果当前节点和下一个节点的数据相同
p1->next=p2->next; // 将当前节点的next指针指向下一个节点的下一个节点
p2=p2->next; // 将p2指针指向下一个节点的下一个节点
}
else{ // 如果当前节点和下一个节点的数据不同
p1=p2; // 将p1指针指向下一个节点
p2=p2->next; // 将p2指针指向下一个节点的下一个节点
}
}
// 输出删除重复数据后的链表中的所有节点
p1=head; // 将p1指针重新指向头指针
while(p1){ // 遍历链表
printf("%d %d\n",p1->num,p1->next); // 输出当前节点的数据和下一个节点的地址
p1=p1->next; // p1指针指向下一个节点
}
return 0;
}
```
阅读全文