#暑期創作大賽#
用C語言建立單向連結清單,并且實作連結清單的插入與删除
#include <stdio.h>
#include <stdlib.h>
struct LinkNode
{
int data;
struct LinkNode *next;
};
typedef struct LinkNode *Lnode;
struct LinkList
{
Lnode pHeader; //頭節點
int m_Size; //長度
};
typedef struct LinkList *Llist;
// 初始化連結清單
Llist init_list()
{
Llist l1 = malloc(sizeof(struct LinkList));
if (l1 == NULL)
printf("記憶體配置設定失敗");
l1->pHeader = malloc(sizeof(struct LinkNode));
l1->pHeader->data = 0;
l1->pHeader->next = NULL;
l1->m_Size = 0;
return l1;
}
// 插入元素
void insert(Llist list, int p, int data)
{
int i = 0;
if((p < 0) || (p > list->m_Size))
p = list->m_Size;
Lnode q = list->pHeader;
for (i = 0; i < p; ++i)
{
q = q->next;
}
Lnode new_node = malloc(sizeof(struct LinkNode));
if(new_node == NULL)
printf("記憶體配置設定失敗");
new_node->next = q->next;
new_node->data = data;
q->next = new_node;
list->m_Size++;
}
// 周遊連結清單
void travel(Llist list)
{
Lnode q = list->pHeader;
printf("連結清單内容為: ");
while(q->next != NULL)
{
q = q->next;
printf("%d ", q->data);
}
printf("\n");
}
// 删除元素
void delete(Llist list, int p)
{
int i = 0;
if((p < 0) || (p >= list->m_Size))
{
printf("節點%d不存在\n", p);
return;
}
Lnode q = list->pHeader;
for (i = 0; i < (p-1); ++i)
{
q = q->next;
}
Lnode qDel = q->next;
q->next = qDel->next;
free(qDel);
qDel = NULL;
list->m_Size -= 1;
}
// 清空連結清單
void clear(Llist list)
{
int i = 0;
Lnode q = list->pHeader->next;
for (i = 0; i < list->m_Size; ++i)
{
Lnode p = q->next;
free(q);
q = p;
}
list->pHeader->next = NULL;
list->m_Size = 0;
}
int main(int argc, char const *argv[])
{
Llist L;
L = init_list();
printf("連結清單頭位址為%p\n", L);
// 插入元素
insert(L, 0, 35);
insert(L, 1, 0);
insert(L, 2 , 9);
insert(L, 3, 13);
travel(L);
// 删除元素
delete(L, 2);
delete(L, 15);
travel(L);
// 清空連結清單
clear(L);
travel(L);
return 0;
}