嵌入式学习——数据结构(双向无头无环链表)——day47

1. makefile——(注意:双向无头链表第一个节点的pre为空,最后一个节点的next为空)

                                        单向无头链表只能找到后一个节点、双向无头链表前后节点都能找到

OBJ:=doulink
OBJS+=main.c doublelink.c
CCl=gcc

$(OBJ):$(OBJS)
	$(CC) $^ -o $@
.PHONY:
clean:
	rm $(OBJ)
test:
	valgrind --tool=memcheck --leak-check=full ./$(OBJ)

2. doublelink.h

#ifndef _DOUBLELINK_H_
#define _DOUBLELINK_H_

typedef struct stu
{
    int id;
    char name[32];
    int score;
}DataType;

typedef struct node
{
    DataType data;
    struct node *ppre;
    struct node *pnext;
}DouNode;

typedef struct list
{
    DouNode *phead;
    int clen;
}DouList;

extern DouList *create_dou_link();
extern int is_empty_dou_link(DouList *plist);
extern int push_head_dou_link(DouList *plist, DataType data);
extern void dou_link_for_each(DouList *plist, int dir);
extern int  push_tail_dou_link(DouList *plist, DataType data);
extern int pop_head_dou_link(DouList *plist);
extern int pop_tail_dou_link(DouList *plist);
extern DouNode *find_name(DouList *plist, char *pname);
extern int modify_score(DouList *plist, char *pname, int pscore);
extern void destory_dou_link(DouList *plist);

#endif

3. doublelink.c

#include "doublelink.h"
#include 
#include 
#include 

DouList *create_dou_link()//创建标签
{
    DouList *plist = NULL;

    plist = (DouList *)malloc(sizeof(DouList));
    if (NULL == plist)
    {
        perror("fail to mall

你可能感兴趣的:(数据结构,学习,链表,开发语言,c语言)