单链表的基本操作分享:
/********************* 单链表的常规操作 ****************************/
LinkList CreateHeadListH(); // 头插法创建单链表
LinkList CreateHeadListT(); // 尾插法创建单链表
int ListEmpty(); // 单链表判空
int ListLength(); // 求单链表长度
void Travel(); // 遍历单链表
int InsertNode(); // 插入结点
int DeleteNode(); // 删除结点
ElemType GetElem(); // 按址查值
int GetLocate(); // 按值查址
int RemoveRepeat(); // 去除重复的值
/*****************************************************************/
定义单链表结构体
单链表是由多个结点链接组成,它的每个结点包含两个域,一个数据域和一个链接域(地址域)。
- 数据域
data
用来存放具体的数据。 - 地址域
next
用来存放下一个节点的位置。
#include "stdio.h"
#include "malloc.h"
#define TRUE 1
#define FALSE 0
typedef int ElemType; // 单链表存储元素的数据类型
// 定义单链表结构体
typedef struct Node(){
ElemType data; // 单链表结点数据域
struct Node *next; // 单链表结点地址域(指向下一个结点)
}*LinkList, Node;
构造单链表
头插法实现
/*
* 头插法创建单链表(带头结点)
* datas 接收数组,用于赋值链表的结点数据
* len datas数组的长度,便于遍历
*/
LinkList CreateHeadListH(ElemType *datas, int len){
// 创建头结点
LinkList head, new_node;
head = (LinkList)malloc(sizeof(Node));
// head -> data = len; // 可以把链表长度存在头结点的数据域中
head -> next = NULL;
// 分配新节点并用头插法链接起来
for(int i=0;i<len;i++){
new_node = (LinkList)malloc(sizeof(Node));
new_node -> data = datas[i];
new_node -> next = head -> next;
head -> next = new_node;
}
return head;
}
头插法构造单链表时一直往单链表的头部插入结点。
尾插法实现
/*
* 尾插法创建单链表(带头结点)
* datas 接收数组,用于赋值链表的结点数据
* len datas数组的长度,便于遍历
*/
LinkList CreateHeadListT(ElemType *datas, int len){
// 创建头结点
LinkList head, p, new_node;
head = (LinkList)malloc(sizeof(Node));
head -> next = NULL;
p = head;
// 分配新节点并用尾插法链接起来
for(int i=0;i<len;i++){
new_node = (LinkList)malloc(sizeof(Node));
new_node -> data =