C语言实现单链表
头文件 reward.h
#define MAX_LENGTH 256 //避免链表过长,这里给链表长度做个限制
typedef struct _MYNODE{
int node;
struct _MYNODE* next;
} MY_NODE,* PT_MY_NODE;
PT_MY_NODE insert_node(PT_MY_NODE,int);
PT_MY_NODE remove_node_by_value(PT_MY_NODE,int);
PT_MY_NODE remove_node_by_index(PT_MY_NODE,int);
PT_MY_NODE clear(PT_MY_NODE);
int output(PT_MY_NODE);
int find_by_index(PT_MY_NODE,int);
int count(PT_MY_NODE);
实现文件 reward.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "reward.h"
// 插入节点
PT_MY_NODE insert_node(PT_MY_NODE list,int item){
PT_MY_NODE temp=(PT_MY_NODE)malloc(sizeof(MYNODE));
temp->node=item;
temp->next=list?list:NULL;
list=temp;
return list;
}
// 根据值删除节点
PT_MY_NODE remove_node_by_value(PT_MY_NODE list,int value){
PT_MY_NODE temp;
if(list->node==value){
temp=list;
list=list->next;
free(temp);
}
PT_MY_NODE iterator=list;
while(iterator){
if(iterator->next&&iterator->next->node==value){
temp=iterator->next;
iterator->next=temp->next;
free(temp)
}
iterator=iterator->next;
}
return list;
}
// 根据索引(下标)删除节点
PT_MY_NODE remove_node_by_index(PT_MY_NODE list,int index){
PT_MY_NODE item=list;
if(index==0){
item=list;
list=list->next;
free(item);
}else{
int i=1;
while(item&&item->next){
PT_MY_NODE temp=item->next;
if(index==i){
item->next=temp->next;
free(temp);
break;
}else{
item=item->next;
++i;
}
}
}
return list;
}
// 清空列表
PT_MY_NODE clear(PT_MY_NODE list){
if(list){
PT_MY_NODE temp=NULL;
int i=0;
while(list){
temp=list;
list=list->next;
free(temp);
++i;
}
}
return list;
}
// 根据索引(下标)查找,并返回值
int find_by_index(PT_MY_NODE list,int index){
int i=0;
PT_MY_NODE temp=list;
while(temp&&index>i){
temp=temp->next;
++i;
}
return temp->node;
}
// 输出打印链表
int output(PT_MY_NODE list){
int i=0;
if(list){
PT_MY_NODE temp=list;
while(temp&&i<=MAX_LENGTH){
printf("list[%04d]=>%04d\n",i,temp->node);
temp=temp->next;
++i;
}
}
return i;
}
// 节点个数计数
int count(PT_MY_NODE list){
PT_MY_NODE temp=list;
int i=0;
while(temp){
temp=temp->next;
++i;
}
return i;
}
主程序
使用链表随机生成不重复的中奖号码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "reward.h"
int main(void){
PT_MY_NODE my_list=NULL;
for(int i=1;i<109;++i){
my_list=insert_node(my_list,i);
}
output(my_list);
for(int i=0;i<3;++i){
srand((unsigned)time(NULL)+i);
int index=rand()%count(my_list);
int value=find_by_index(my_list,index);
printf("The [%03d] Number Persnal[%03d]\n",i+1,value);
my_list=remove_node_by_index(my_list,index);
}
my_list=clear(my_list);
return 0;
}