数据结构c语言代码实现单链表
关于数据结构,单链表一定是最简单的了。
那么今天让我们一起来看看如何用c语言实现单链表尼?废话不多说,直接上代码。
这是分装的代码,直接合并即是全部代码。
1. 声明头文件,结构体
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef struct Node
{
	int data;
	struct Node* next;
}Node; 
2. 初始化链表
Node* initList()
{
	Node* list = (Node*)malloc(sizeof(Node));
	assert(list);            //assert作用:如果开辟空间失败,直接报错
	list->data = 0;        //以头结点的数据域来作为元素个数
	list->next = NULL;      
	return list;
} 
3. 头插法添加
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. 尾插法添加
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. 随便一位置删除元素
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. 打印链表
void printList(Node* list)
{
	list = list->next;							//跳过头结点
	while (list)
	{
		printf("%d->", list->data);
		list = list->next;
	}
	printf("NULL
");
} 
7. 主函数
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;
}
				       
			          