特点:链表的元素不能随机访问,一般只有一个表头。
链表是串联的,内存中不一定是顺序的,所以不能随机访问。
链表的元素是串联且前一个元素链接后一个元素。
#include <stdio.h>
#include <stdlib.h>
//结点结构体
typedef struct Node {
int data; //结点数据
struct Node *next;//下一节点指针
}Node,*LinkedList;
//clear清空函数
void clear(LinkedList head) {
Node *current_node = head; //建立指向头结点的当前结点
while (current_node != NULL) {
Node *delete_node = current_node; //清除的结点为当前结点
current_node = current_node->next; //结点指向下一个结点位置
free(delete_node);
}
}
//插入函数
LinkedList insert(LinkedList head,Node*node,int index){
//边界判断先分析头结点是否为空
if(head==NULL){
if(index!=0){
return head;
}
head=node;
return head;
}
//插入在头指针位置
if(index==0){
node->next=head;
head=node;
return head;
}
//创建当前结点
Node* current_node=head;
//计算结点数
int count=0;
while(current_node->next!=NULL&&count<index-1){
current_node=current_node->next;
count++;
}
if(count==index-1){
node->next=current_node->next;
current_node->next=node;
}
return head;
}
//遍历链表
void output(LinkedList head){
//先判断链表是否为空
if(head==NULL){
return;
}
Node *current_node=head;
while(current_node!=NULL){
printf("%d ",current_node->data);
current_node=current_node->next;
}
printf("%d",current_node->data);
}
//删除结点
LinkedList delete_node(LinkedList head,int index){
//判断是否为空
if(head==NULL){
return head;
}
Node* current_node=head;
int count=0;
if(index==0){
head=head->next;
free(current_node);
return head;
}
while(current_node->next != NULL && count < index - 1){
current_node=current_node->next;
count++;
}
if(count==index-1&¤t_node->next!=NULL){
Node*delete_node=current_node->next;
current_node->next=delete_node->next;
free(delete_node);
}
return head;
}