c实现链表的增删查改。
链表具有易增删的特性,是数据结构的基础中的基础。无论是什么结构,都离不开链表这一基础,而单链表又是基础中的基础,打好基础很重要,所以单链表是我们开启数据结构之路的第一步,接下来,我们用C语言实现链表的增删查改的功能:
首先我们要创建一个表头,单链表链表可分为有头节点的单链表和无头结点的单链表,头节点的使用可以使链表的操作更加简易,一般头节点的数据域不存放数据元素或存放链表的数据元素个数。
单链表的节点一般为数据元素加指针域:(如下)
struct Node{
Datatype data;
Node* link;
};
typedefine int Datatype;
创建一个空表头,返回头节点:(头结点的指针域赋值为空,方便增删操作)
Node* CreatNULLlink(Node* head)
{
head = (Node *)malloc(sizeof(Node));
if(head == NULL)
{
return NULL;
printf("Fail to creat");
}
else{
head->data = 0;
head->link = NULL;
printf("Success to creat\n");
return head;
}
}
此时一个空表已经创建好啦!之后的操作无非就是数据的增删查改啦! 那我们先进行第一步:节点的插入。 插入可以是头插法,也可以是尾插法。(头插法就是在链表的头节点后插入新的节点,尾插法就是在链表尾新开辟一个节点空间,插入新的节点) 头插法可以如下函数模块实现:
void HeadInsert(Node* head , int datax)
{
Node *p;
p=(Node*)malloc(sizeof(Node));
if(head->link == NULL)
{
head->link = p;
p->data = datax;
p->link = NULL;
}
else{
p->data = datax;
p->link = head->link;
head->link = p;
}
}
接下来用尾插法实现: (尾插法较为简单,只需要找到表尾,把要插入的数据插入即可,注意表尾插入之后其表尾指针域置空)
void TailInsert(Node* head,int datax)
{
Node *p,*q;
q=(Node*)malloc(sizeof(Node));
p=head;
while(p->link !=NULL)
p = p->link;
p->link = q;
q->data = datax;
q->link = NULL;
}
接下来我们把已经创建好的link打印出来:
void Printlink(Node* head)
{
Node* p,*q;
p = (Node*)malloc(sizeof(Node));p = head;
q = (Node*)malloc(sizeof(Node));q = head->link;
printf("输出头节点:");
while(p->link != NULL)
{
printf("%d->",p->data);
p = p->link;
}
printf("%d\n",p->data);
printf("不输出头节点:");
while(q->link != NULL)
{
printf("%d->",q->data);
q = q->link;
}
printf("%d",q->data);
}
“睡觉啦,明天继续写!!!”
|