线性表之单链表(升级版(再封装))
typedef int Data;
typedef struct _Node
{
Data data;
struct _Node* next;
}Node;
typedef struct _List
{
int size;
Node* front;
Node* tail;
}List;
List* createList()
{
List* list = malloc(sizeof(List));
assert(list != NULL);
Node* headNode = calloc(1, sizeof(Node));
assert(list != NULL);
headNode->next = NULL;
headNode->data = -1;
list->front = headNode;
list->tail = headNode;
list->size = 0;
return list;
}
void push_back(List* list, Data data)
{
Node* newNode = createNode(data);
list->tail->next = newNode;
list->tail = newNode;
list->size++;
}
void push_front(List* list, Data data)
{
Node* newNode = createNode(data);
newNode->next = list->front->next;
list->front->next = newNode;
list->size++;
}
bool empty(List* list)
{
return list->front->next == NULL;
}
void pop_back(List* list)
{
if (empty(list))
{
return;
}
Node* curNode = list->front;
while (curNode->next!=list->tail)
{
curNode = curNode->next;
}
free(curNode->next);
curNode->next = NULL;
list->tail = curNode;
list->size--;
}
void pop_front(List* list)
{
if (empty(list))
{
return;
}
Node* delNode =list->front->next;
list->front->next = delNode->next;
if (delNode->next == NULL)
{
list->tail = list->front;
}
free(delNode);
list->size--;
}
void destory(List** list)
{
clear(*list);
free((*list)->front);
free(*list);
*list = NULL;
}