本文主要是介绍链表操作:尾插法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
自定义链表操作:
static PT_DispOpr g_ptInputOprHead; /*定义链表头*//*尾插链表*/
int RegisterOpr(PT_DispOpr ptDispOpr)
{PT_DispOpr ptTmp;if (!g_ptDispOprHead){g_ptDispOprHead = ptDispOpr;ptDispOpr->ptNext = NULL;}else{ptTmp = g_ptDispOprHead;while (ptTmp->ptNext){ptTmp = ptTmp->ptNext;}ptTmp->ptNext = ptDispOpr;ptDispOpr->ptNext = NULL;}return 0;
}
/*查询链表*/
PT_DispOpr GetDispOpr(char *pcName)
{PT_DispOpr ptTmp = g_ptDispOprHead;while (ptTmp){if (strcmp(ptTmp->name, pcName) == 0){return ptTmp;}ptTmp = ptTmp->ptNext;}return NULL;
}
linux的kernel的链表函数:
/*参考 uvc_drver*/
/*双向链表*//*定义列表里面的项:结构体(如果是结构体链表)*/
struct myuvc_buffer {struct v4l2_buffer buf;/*一块缓存*/int state;int vma_use_conut; /*表示是否已经被mmap ,初始值为0,mmapp一次就加1*/wait_queue_head_t wait; /*APP要读某个缓冲区,如果无数据,在此休眠*/struct list_head stream; /*要包含这一项 !!!*/int error;
};struct list_head mainqueue; /*定义链表*/INIT_LIST_HEAD(&my_queue.mainqueue); /*初始化链表*/list_add_tail(&buf->stream,&my_queue.mainqueue); /*尾插,也有头插函数*/struct myuvc_buffer *buf;
buf = list_first_entry(&my_queue.mainqueue, struct myuvc_buffer, stream);
/*遍历第一个stream项,返回myuvc_buffer类型指针*/list_del(&buf->stream);/*删除*/
参考:linux kernel 中双向链表详解(一)_list_first_entry-CSDN博客
这篇关于链表操作:尾插法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!