test.c
#include "comdr.h"
#include "list.h"
#include <stdio.h>
#define ARR_MAX 22
int main(int argc, char **argv)
{
LinkedList* list = list_createList();
list_insertBack(list, 1);
list_insertBack(list, 2);
list_insertBack(list, 3);
list_insertBack(list, 4);
list_insertBack(list, 5);
list_insertBack(list, 6);
list_insertBack(list, 7);
list_printAll(list);
return 0;
}
list.h
#pragma once
#include "comdr.h"
//===== struct =====
typedef struct _Node Node;
struct _Node
{
Node *next;
Node *prev;
#ifdef TEST
int data;
#else
void* data;
#endif
};
typedef struct
{
Node *head;
Node *tail;
int count;
}LinkedList, *LPLinkedList;
//===== function =====
LPLinkedList
list_createList();
BOOL
list_deleteList(LPLinkedList plist);
#ifdef TEST
Node*
list_newNode(int data);
void
list_insertBack(LPLinkedList plist, int data);
void
list_insertPront(LPLinkedList plist, int data);
#else
Node*
list_newNode(void* data);
void
list_insertBack(LPLinkedList plist, void* data);
void
list_insertPront(LPLinkedList plist, void* data);
#endif
void list_printAll(LPLinkedList plist);
list.c
#include "list.h"
#include <stdio.h>
#include <stdlib.h>
#ifdef TEST
void list_insertBack(LPLinkedList plist, int data)
{
Node* newNode = list_newNode(data);
if(plist->count == 0)
{
plist->head = newNode;
plist->tail = plist->head;
}
else
{
newNode->prev = plist->tail;
plist->tail->next = newNode;
plist->tail = newNode;
}
plist->count++;
}
void list_printAll(LPLinkedList plist)
{
Node* cur = plist->head;
while(cur)
{
printf("%d ",cur->data);
cur = cur->next;
}
}
Node* list_newNode(int data)
{
Node* node = (Node*)malloc(sizeof(Node));
node->next = null;
node->prev = null;
node->data = data;
return node;
}
#endif
LPLinkedList list_createList()
{
LPLinkedList list = (LPLinkedList)malloc(sizeof(LPLinkedList));
list->head = null;
list->tail = null;
list->count = 0;
return list;
}
BOOL list_deleteList(LPLinkedList plist)
{
if(!plist)
return FALSE;
else
{
if(plist->tail == plist->head)
free(plist);
else
{
Node* cur = plist->tail;
Node* tmp = null;
while(!cur->prev)
{
tmp = cur;
cur = cur->prev;
free(tmp);
}
}
}
}
comdr.h
#pragma once
#define TEST
#define NOT_INCLUDE_WINDOWS_H
#ifdef NOT_INCLUDE_WINDOWS_H
#define FALSE 0
#define TRUE 1
typedef int BOOL;
#endif
typedef unsigned int uint;
typedef unsigned char byte;
#define null 0
댓글 없음:
댓글 쓰기