关于数据结构,单链表一定是最简单的了。
那么今天让我们一起来看看如何用c语言实现单链表尼?废话不多说,直接上代码。
这是分装的代码,直接合并即是全部代码。
1. 声明头文件,结构体
代码语言:javascript复制#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef struct Node
{
int data;
struct Node* next;
}Node;
2. 初始化链表
代码语言:javascript复制Node* initList()
{
Node* list = (Node*)malloc(sizeof(Node));
assert(list); //assert作用:如果开辟空间失败,直接报错
list->data = 0; //以头结点的数据域来作为元素个数
list->next = NULL;
return list;
}
3. 头插法添加
代码语言:javascript复制void headInsert(Node* list,int data)
{
Node* node = (Node*)malloc(sizeof(Node));
assert(node); //assert作用:如果开辟空间失败,直接报错
node->data = data;
node->next = list->next;
list->next = node;
list->data ; //表示链表长度加一
}
4. 尾插法添加
代码语言:javascript复制void tailInsert(Node* list,int data)
{
Node* head = list; //保存头结点地址
Node* node = (Node*)malloc(sizeof(Node));
assert(node); //assert作用:如果开辟空间失败,直接报错
node->data = data;
node->next = NULL;
list=list->next;
while (list->next != NULL)
{
list = list->next;
}
list->next = node;
head->data ; //长度加一
}
5. 随便一位置删除元素
代码语言:javascript复制void delete(Node* list, int data)
{
Node* pre = list;
Node* current = list->next; //定义前后两个指针
while (current != NULL)
{
if (current->data == data)
{
pre->next = current->next;
break; //删除一个,如果删重复元素去掉break即可
}
pre = current;
current= current->next;
}
list->data--; //元素长度减一
free(current);
}
6. 打印链表
代码语言:javascript复制void printList(Node* list)
{
list = list->next; //跳过头结点
while (list)
{
printf("%d->", list->data);
list = list->next;
}
printf("NULLn");
}
7. 主函数
代码语言:javascript复制int main()
{
Node* list = initList();
headInsert(list, 1);
headInsert(list, 2);
headInsert(list, 3);
tailInsert(list, 1);
tailInsert(list, 2);
tailInsert(list, 3);
delete(list, 3);
printList(list);
//这是测试调用函数,可自行更改。
return 0;
}
如有错误,欢迎大家批评改正。