嵌入式 单向链表中节点链表化


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct node{
    char jipnc_id[16];
 int status;
 int fd;
 pthread_t thread_id;
 struct node *next;
}NODE;

typedef struct {
    NODE *head;
 NODE *tail;
 int num;
}JIPNC_LIST;


void list_init(JIPNC_LIST *list)
{
    list->head = NULL;
    list->tail = NULL;
    list->num = 0;

    return;
}

void insert_node(JIPNC_LIST *list, char *jipnc_id, int fd, pthread_t thread_id)
{
    NODE *new_node = (NODE *)malloc(sizeof(NODE) + 4);

    memset(new_node, 0, sizeof(NODE) + 4);

    memcpy(new_node->jipnc_id, jipnc_id, 16);
    new_node->status = JMS_JIPNC_FREE;
    new_node->fd = fd;
    new_node->thread_id = thread_id;
    new_node->next = NULL;

    if(list->num == 0){
 list->head = new_node;
 list->tail = new_node;
 list->num++;
    }
    else{
 list->tail->next = new_node;
 list->tail = new_node;
 new_node->next = NULL;
 list->num++;
    }

    return;
}

void delete_node(JIPNC_LIST *list, int fd)
{
    int i;
    int num = list->num;
    NODE * pre_node = NULL;
    NODE * cur_node = list->head;

    if(list == NULL){
 return;
    }

    for(i = 0;i < num;i++){
 if(cur_node->fd == fd){
     break;
 }
 pre_node = cur_node;
 cur_node = cur_node->next;
    }

    if(cur_node == NULL){
 return;
    }

    if(cur_node == list->head){
 list->head = list->head->next;
 if(list->head == NULL){
     list->tail = NULL;
 }
 if(cur_node != NULL){
     free(cur_node);
     cur_node = NULL;
 }
 list->num--;
    }
    else{
 pre_node->next = cur_node->next;
 if(pre_node->next == NULL){
     list->tail = pre_node;
 }
 if(cur_node != NULL){
     free(cur_node);
     cur_node = NULL;
 }
 list->num--;
    }

    return;
}

void modify_node_status(JIPNC_LIST *list, char *jipnc_id, int value)
{
    int i;
    int num = list->num;
    NODE * cur_node = list->head;

    if(jipnc_id == NULL || strlen(jipnc_id) == 0){
 return;
    }

    for(i = 0;i < num;i++){
 if(0 == strncmp(cur_node->jipnc_id, jipnc_id, 16)){
     cur_node->status = value;
     return;
 }
 cur_node = cur_node->next;
    }
}

int get_node_status(JIPNC_LIST *list, char *jipnc_id)
{
    int i;
    int num = list->num;
    NODE * cur_node = list->head;

    if(jipnc_id == NULL || strlen(jipnc_id) == 0){
 return -1;
    }

    for(i = 0;i < num;i++){
 if(0 == strncmp(cur_node->jipnc_id, jipnc_id, 16)){
     return cur_node->status;;
 }
 cur_node = cur_node->next;
    }

    return -2;
}

int get_node_fd(JIPNC_LIST *list, char *jipnc_id)
{
    int i;
    int num = list->num;
    NODE * cur_node = list->head;

    if(jipnc_id == NULL || strlen(jipnc_id) == 0){
 return -1;
    }

    for(i = 0;i < num;i++){
 if(0 == strncmp(cur_node->jipnc_id, jipnc_id, 16)){
     return cur_node->fd;
 }
 cur_node = cur_node->next;
    }

    return -1;
}

pthread_t get_node_thread_id(JIPNC_LIST *list, int fd)
{
    int i;
    int num = list->num;
    NODE * cur_node = list->head;

    for(i = 0;i < num;i++){
 if(cur_node->fd == fd){
     return cur_node->thread_id;
 }
 cur_node = cur_node->next;
    }

    return -1;
}

void free_list(JIPNC_LIST *list)
{
    int i;
    int num = list->num;
    NODE * tmp_node = NULL;

    for(i = 0; i < num; i++){
 tmp_node = list->head;
 list->head = list->head->next;
 list->num--;
 free(tmp_node);
 tmp_node = NULL;
    }

    list->head = NULL;
    list->tail = NULL;
    list->num = 0;

    return;
}

void print_list(JIPNC_LIST *list)
{
    int i;
    NODE *cur = list->head;

    jms_print("-------------------------------------------------------\n");
    jms_print("online num = %d\n",list->num);
    for(i = 0;i < list->num;i++){
  jms_print("id:%16s\tpic_static:%2d\tfd:%4d\n",cur->jipnc_id,cur->status,cur->fd);
  cur = cur->next;
    }
    jms_print("\n\n");
}

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值