对单向链表操作的函数封装
#include <stdio.h>
#include "./linklist.h"
#include <stdlib.h>
/*
* function: 定义链表
* @param [ in]
* @param [out]
* @return
*/
Links* creat_links(){
Links* ls = (Links*)malloc(sizeof(Links));
if(ls == NULL){
printf("创建失败\n");
return NULL;
}
ls->next = NULL;
ls->data.len = 0;
return ls;
}
/*
* function: 向链表头部插入数据
* @param [ in]
* @param [out]
* @return
*/
void insert_linksHead(Links* ls,datatype data){
Links* lk = (Links*)malloc(sizeof(Links));
if(lk == NULL){
printf("创建失败\n");
}
lk->data.text = data;
lk->next = ls->next;
ls->next = lk;
ls->data.len++;
}
/*
* function:遍历链表
* @param [ in]
* @param [out]
* @return
*/
void show_links(Links* ls){
Links* head = ls;
while(head->next != NULL){
head = head->next;
printf("%d\t",head->data.text);
}
printf("\n");
}
/*
* function: 向链表尾部插入数据
* @param [ in]
* @param [out]
* @return
*/
void insert_linkstail(Links* ls,datatype data){
Links* head = ls;
Links* lk = (Links*)malloc(sizeof(Links));
lk->data.text = data;
lk->next = NULL;
while(head->next != NULL){
head = head->next;
if(head->next == NULL){
head->next = lk;
break;
}
}
ls->data.len++;
}
/*
* function: 删除链表中的首个有效数据
* @param [ in]
* @param [out]
* @return
*/
void delete_linkshead(Links* ls){
if(ls->data.len <= 0){
printf("链表为空,删除失败\n");
return;
}
Links* lk = ls->next->next;
free(ls->next);
ls->next = lk;
ls->data.len--;
}
/*
* function: 删除链表尾部节点;
* @param [ in]
* @param [out]
* @return
*/
void delete_linkstail(Links* ls){
Links* head = ls;
if(ls->data.len <= 0){
printf("链表为空,删除失败\n");
return;
}
for(int i=0;i<ls->data.len;i++){
head = head->next;
if(i == ls->data.len-2){
free(head->next);
head->next = NULL;
break;
}
}
ls->data.len--;
}
/*
* function: 删除指定数据的节点
* @param [ in]
* @param [out]
* @return
*/
void delete_linkscentre(Links* ls,datatype data){
Links* head = ls;
if(ls->next->data.text == data){
delete_linkshead(ls);
return;
}
head = head->next;
for(int i=1;i<ls->data.len;i++){
printf("当前节点的下一个值为%d\n",head->next->data.text);
if(head->next->data.text == data){
free(head->next);
head->next = head->next->next;
ls->data.len--;
break;
}
head= head->next;
}
}
/*
* function: 按指定位置插入数据节点
* @param [ in]
* @param [out]
* @return
*/
void insert_linksIndex(Links* ls,int index,datatype data){
Links* head = ls;
Links* lk = (Links*)malloc(sizeof(Links));
lk->data.text = data;
int i=1;
if(1>index || index >ls->data.len){
printf("输入位置错误\n");
return;
}
for(;i<index;i++){
head = head->next;
}
lk->next = head->next;
head->next = lk;
ls->data.len++;
}
/*
* function: 按指定位置取值
* @param [ in]
* @param [out]
* @return
*/
datatype get_linksIndex(Links* ls,int index){
datatype data;
Links* head = ls;
if(1>index || index >ls->data.len){
printf("输入位置错误\n");
return;
}
for (int i=0;i<index;i++){
head = head->next;
}
data = head->data.text;
}