#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
typedef int ElemType;
typedef struct ListNode
{
ElemType data;
struct ListNode* prev;
struct ListNode* next;
}ListNode;
typedef struct
{
struct ListNode* head;
int cursize;
}LinkList;
ListNode* BuyNode()
{
ListNode* s = (ListNode*)malloc(sizeof(ListNode));
if (s == nullptr) return nullptr;
memset(s, 0, sizeof(ListNode));
return s;
}
void FreeNode(ListNode* p)
{
free(p);
p = nullptr;
}
void Init_List(LinkList* plist)
{
assert(plist != nullptr);
plist->head = BuyNode();
ListNode* p = plist->head;
plist->cursize = 0;
p->next = p;
p->prev = p;
}
void Print_List(LinkList* plist)
{
assert(plist != nullptr);
ListNode* p = plist->head->next;
while (p != plist->head)
{
printf("%2d->", p->data);
p = p->next;
}
}
void Push_Fornt(LinkList* plist, int val)
{
assert(plist != nullptr);
ListNode* newnode = BuyNode();
newnode->data = val;
newnode->next = plist->head->next;
newnode->prev = plist->head;
plist->head->next->prev = newnode;
plist->head->next = newnode;
plist->cursize += 1;
}
void Push_Back(LinkList* plist, int val)
{
assert(plist != nullptr);
ListNode* newnode = BuyNode();
newnode->data = val;
newnode->next = plist->head;
plist->head->prev->next = newnode;
newnode->prev = plist->head->prev;
plist->head->prev = newnode;
plist->cursize += 1;
}
void Pop_back(LinkList* plist)
{
assert(plist != nullptr);
ListNode* del = plist->head->prev;
plist->head->prev = del->prev;
del->prev->next = plist->head;
FreeNode(del);
plist->cursize -= 1;
}
void Pop_Front(LinkList* plist)
{
assert(plist != nullptr);
ListNode* del = plist->head->next;
plist->head->next = del->next;
del->next->prev = plist->head;
FreeNode(del);
plist->cursize -= 1;
}
双向循环链表的头插尾插,头删尾删
最新推荐文章于 2023-06-16 01:25:19 发布