双向循环链表C语言
程序员文章站
2024-03-22 11:33:10
...
#include <stdio.h>
#include <stdlib.h>
struct doubleList {
int data;
struct doubleList* front;
struct doubleList* rear;
};
struct doubleList* createList()
{
struct doubleList* headNode = (struct doubleList *)malloc(sizeof(struct doubleList));
headNode->front = headNode->rear = headNode;
return headNode;
}
struct doubleList* createNode(int data)
{
struct doubleList* newNode = (struct doubleList *)malloc(sizeof(struct doubleList));
newNode->data = data;
newNode->front = newNode->rear = NULL;
return newNode;
}
void insertNode_head(struct doubleList* headNode, int data)
{
struct doubleList* newNode = createNode(data);
newNode->front = newNode;
newNode->rear = headNode->rear;
headNode->rear->front = newNode;
headNode->rear = newNode;
}
void insertNode_rear(struct doubleList* headNode, int data)
{
struct doubleList* newNode = createNode(data);
struct doubleList* lastNode = headNode;
while(lastNode->rear != headNode)
{
lastNode = lastNode->rear;
}
headNode->front = newNode;
newNode->rear = headNode;
lastNode->rear = newNode;
newNode->front = lastNode;
}
void deleteNode_point(struct doubleList* headNode, int posdata)
{
struct doubleList* posNode = headNode->rear;
struct doubleList* posNodeFront = headNode;
while(posNode->data != posdata)
{
posNodeFront = posNode;
posNode = posNodeFront->rear;
if(posNode->rear == headNode)
{
return;
}
}
posNodeFront->rear = posNode->rear;
posNode->rear->front = posNodeFront;
free(posNode);
}
void printList_rear(struct doubleList* headNode)
{
struct doubleList* t = headNode->rear;
while(t != headNode)
{
printf("%d", t->data);
t = t->rear;
}
printf("\n");
}
void printList_front(struct doubleList* headNode)
{
struct doubleList* t = headNode->front;
while(t != headNode)
{
printf("%d", t->data);
t = t->front;
}
printf("\n");
}
int main()
{
struct doubleList* list = createList();
insertNode_head(list, 1);
insertNode_head(list, 2);
insertNode_head(list, 3);
printList_rear(list);
insertNode_rear(list, 0);
printList_rear(list);
deleteNode_point(list, 3);
printList_rear(list);
return 0;
}
上一篇: KETTLE整架构、整库迁移(如何一次抽取200张表)
下一篇: 两个有序链表的合并(递归)