C语言——链表实现
前言
开发过程中需要实现一个fifo,使用单向链表方式进行完成;linux自带list,但是和使用灵活度不高,因此决定自己实现一个链表来完成fifo的操作;
注意事项
单向链表其实更合适堆的结构,先进后出;但是我的使用场景深度不会很深,因此使用单向链表+尾部插入的方式就可以简单的实现fifo;
代码实现
点击查看代码
typedef struct _NODE_S
{
int u32Val;
struct _NODE_S *pstNext;
}NODE_S;
NODE_S* LIST_CreateNode(int u32Val)
{
NODE_S *pstNodeTmp = (NODE_S*)malloc(sizeof(NODE_S));
pstNodeTmp->u32Val = u32Val;
pstNodeTmp->pstNext = NULL;
return pstNodeTmp;
}
void LIST_Write(NODE_S *pstHead, NODE_S *pstNew)
{
while (pstHead->pstNext != NULL)
{
pstHead = pstHead->pstNext;
}
pstHead->pstNext = pstNew;
}
int LIST_CheckNull(NODE_S *pstHead)
{
if (pstHead->pstNext == NULL)
{
printf("list is null \n");
return 1;
}
else
return 0;
}
int LIST_Read(NODE_S *pstHead)
{
if (LIST_CheckNull(pstHead)) return -1;
int u32Val = pstHead->pstNext->u32Val;
NODE_S *pstFreeTmp = pstHead->pstNext;
pstHead->pstNext = pstHead->pstNext->pstNext;
free(pstFreeTmp);
return u32Val;
}
void LIST_Print(NODE_S *pstHead)
{
do{
printf("Val = %d,\n", pstHead->u32Val);
pstHead = pstHead->pstNext;
} while (pstHead != NULL);
}
int main()
{
NODE_S *pstListHead = LIST_CreateNode(0);
unsigned int u32Val;
LIST_Write(pstListHead, LIST_CreateNode(1));
LIST_Write(pstListHead, LIST_CreateNode(2));
LIST_Print(pstListHead);
LIST_Write(pstListHead, LIST_CreateNode(3));
LIST_Print(pstListHead);
LIST_Write(pstListHead, LIST_CreateNode(5));
LIST_Print(pstListHead);
u32Val = LIST_Read(pstListHead);
printf("u32Val = %d \n", u32Val);
u32Val = LIST_Read(pstListHead);
printf("u32Val = %d \n", u32Val);
u32Val = LIST_Read(pstListHead);
printf("u32Val = %d \n", u32Val);
u32Val = LIST_Read(pstListHead);
printf("u32Val = %d \n", u32Val);
u32Val = LIST_Read(pstListHead);
printf("u32Val = %d \n", u32Val);
LIST_Print(pstListHead);
while (1);
return 0;
}

浙公网安备 33010602011771号