#include <stdio.h>
struct list_SY
{
struct list_SY *next;
int data;
};
struct list_SY *listSY;
char data[]={0, 1, 1, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 5, 2, 1, 0, 5, 6, 5};
int data_len = sizeof(data)/sizeof(char);
int list_SY_size(struct list_SY *head)
{
int size = 0;
struct list_SY *tail = NULL;
if (head==NULL) {
printf("list is null, head ptr=%p\n", head);
return 0;
}
size++;
tail = head;
while(tail->next!=NULL) {
tail++;
size++;
}
printf("list_SY_size, %d\n", size);
return size;
}
struct list_SY *list_SY_tail(struct list_SY *head)
{
struct list_SY *tail = NULL;
if (head==NULL){
printf("list is null, head ptr=%p\n", head);
return NULL;
}
tail = head;
while(tail->next!=NULL)
tail++;
//printf("list_SY_tail, tail ptr=%p, \n", tail);
return tail;
}
struct list_SY *list_SY_search(struct list_SY *head, int data)
{
struct list_SY *p = NULL;
if (head==NULL){
printf("list is null, head ptr=%p\n", head);
return NULL;
}
p = head;
while(p!=NULL) {
if(p->data==data)
break;
p++;
}
return p;
}
void list_SY_add(struct list_SY *head, struct list_SY *node)
{
struct list_SY *tail=NULL;
//printf("list_SY_add, head ptr=%p, node ptr=%p, data=%d\n", head, node, node->data);
tail = list_SY_tail(head);
if (tail==NULL) {
head = node;
node->next = NULL;
} else {
tail->next = node;
node->next = NULL;
}
}
void list_SY_show(struct list_SY *head)
{
struct list_SY *p;
int i = 0;
printf("list_SY_show\n");
p = head;
while(p!=NULL){
printf("node %d: ptr=%p, data=%d\n",i++, p, p->data);
p = p->next;
}
}
struct list_SY *list_SY_init(struct list_SY *head, int nodes_num)
{
int i = 0;
struct list_SY *p;
struct list_SY *list_new;
printf("list_SY_init\n");
list_new = malloc(nodes_num*sizeof(struct list_SY));
p = list_new;
#if 0
while(i<nodes_num) {
p->next = NULL;
p->data = data[i];
p->next = p+1;
//list_SY_add(head, p);
printf("node %d: ptr=%p, data=%d\n",i, p, p->data);
i++;
p++;
}
#else
while(i<nodes_num) {
p->next = NULL;
p->data = data[i];
list_SY_add(list_new, p);
//printf("node %d: ptr=%p, data=%d\n",i, p, p->data);
i++;
p++;
}
#endif
p = p-1;
p->next = NULL;
head = list_new;
list_SY_show(head);
list_SY_size(head);
return head;
}
int is_in_repeat_data(int *repeat_data, int size, int data)
{
int is_in = 0;
int *p = repeat_data;
while (size--) {
if(*p==data){
is_in = 1;
break;
} else
p++;
}
return is_in;
}
int is_repeat_in_list(struct list_SY *head, int data)
{
struct list_SY *p = NULL;
int is_repeat = 0;
if (head==NULL){
printf("list is null, head ptr=%p\n", head);
return NULL;
}
p = head;
while(p!=NULL) {
if(p->data==data){
is_repeat += 1;
}
if(is_repeat>=2)
break;
p = p->next;
}
is_repeat = (is_repeat>=2) ? 0x1 : 0x0;
//printf("data %d repeat in list=%d\n", data, is_repeat);
return is_repeat;
}
int list_SY_caclute_repeat_data_num(struct list_SY *head)
{
int repeat_num = 0;
int repeat_num_max = 0;
int list_size = 0;
int *repeat_data;
int is_repeat = 0;
int i = 0;
list_size = list_SY_size(head);
repeat_num_max = list_size/2;
repeat_data = malloc(repeat_num_max*sizeof(int));
printf("list_size=%d \n", list_size);
struct list_SY *p;
if (head==NULL)
return 0;
p = head;
while(p!=NULL) {
printf("node:%2d----------------------\n", i++);
if (is_in_repeat_data(repeat_data, repeat_num, p->data)) {
//printf("data %d is in repeat_data_arr\n", p->data);
p = p->next;
} else if (is_repeat_in_list(head, p->data)){
printf("data %d is repeat in list_data\n", p->data);
repeat_data[repeat_num] = p->data;
repeat_num++;
p = p->next;
} else {
printf("data %d is not repeat in list_data\n", p->data);
p = p->next;
}
}
for(i=0;i<repeat_num;i++)
printf("repeat_data[%2d] = %2d\n", i, repeat_data[i]);
printf("data---------------------repeat_num = %2d\n", repeat_num);
return 0;
}
int main()
{
printf("data_len=%d \n", data_len);
listSY = list_SY_init(listSY, data_len);
//is_repeat_in_list(listSY, 11);
list_SY_caclute_repeat_data_num(listSY);
return 0;
}
data_len=23
list_SY_init
list_SY_show
node 0: ptr=0x2367010, data=0
node 1: ptr=0x2367020, data=1
node 2: ptr=0x2367030, data=1
node 3: ptr=0x2367040, data=3
node 4: ptr=0x2367050, data=4
node 5: ptr=0x2367060, data=5
node 6: ptr=0x2367070, data=6
node 7: ptr=0x2367080, data=7
node 8: ptr=0x2367090, data=8
node 9: ptr=0x23670a0, data=9
node 10: ptr=0x23670b0, data=9
node 11: ptr=0x23670c0, data=8
node 12: ptr=0x23670d0, data=7
node 13: ptr=0x23670e0, data=6
node 14: ptr=0x23670f0, data=5
node 15: ptr=0x2367100, data=4
node 16: ptr=0x2367110, data=5
node 17: ptr=0x2367120, data=2
node 18: ptr=0x2367130, data=1
node 19: ptr=0x2367140, data=0
node 20: ptr=0x2367150, data=5
node 21: ptr=0x2367160, data=6
node 22: ptr=0x2367170, data=5
list_SY_size, 23
list_SY_size, 23
list_size=23
node: 0----------------------
data 0 is repeat in list_data
node: 1----------------------
data 1 is repeat in list_data
node: 2----------------------
node: 3----------------------
data 3 is not repeat in list_data
node: 4----------------------
data 4 is repeat in list_data
node: 5----------------------
data 5 is repeat in list_data
node: 6----------------------
data 6 is repeat in list_data
node: 7----------------------
data 7 is repeat in list_data
node: 8----------------------
data 8 is repeat in list_data
node: 9----------------------
data 9 is repeat in list_data
node:10----------------------
node:11----------------------
node:12----------------------
node:13----------------------
node:14----------------------
node:15----------------------
node:16----------------------
node:17----------------------
data 2 is not repeat in list_data
node:18----------------------
node:19----------------------
node:20----------------------
node:21----------------------
node:22----------------------
repeat_data[ 0] = 0
repeat_data[ 1] = 1
repeat_data[ 2] = 4
repeat_data[ 3] = 5
repeat_data[ 4] = 6
repeat_data[ 5] = 7
repeat_data[ 6] = 8
repeat_data[ 7] = 9
data---------------------repeat_num = 8