#include <stdio.h>
#include <stdlib.h>
#include "03_linklist.h"
/*
* function: //创建一个单向链表
* @param [ in]
* @param [out]
* @return
*/
Linklist* create_linklist(void)
{
Linklist *head=(Linklist*)malloc(sizeof(Linklist));
if(NULL==head)
{
printf("头结点申请失败,链表创建失败\n");
return NULL;
}
//头结点中链表长度要初始化为0
head->data.len=0;
//头结点中的指针域要初始化为NULL
head->next=NULL;
return head;
}
/*
* function: //头插法插入数据
* @param [ in]
* @param [out]
* @return
*/
void insert_linklistHead(Linklist* head,datatype num)
{
//创建一个新结点
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(NULL==temp)
{
printf("创建一个新结点失败,插入失败\n");
return;
}
//将结点进行初始化
temp->data.text=num;
temp->next=NULL;
//将新的结点头插法插入链表
temp->next=head->next;
head->next=temp;
head->data.len++; //更新头结点中链表长度
return;
}
/*
* function: //遍历链表
* @param [ in]
* @param [out]
* @return
*/
void show_linklist(Linklist* head)
{
Linklist* p=head;
while(p->next!=NULL)
{
p=p->next;
printf("%d\t",p->data.text);
}
printf("\n");
return;
}
/*
* function: //尾插法插入数据
* @param [ in]
* @param [out]
* @return
*/
void insert_linklistRear(Linklist* head,datatype num)
{
//创建一个新结点
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(NULL==temp)
{
printf("创建一个新结点失败,插入失败\n");
return;
}
//将结点进行初始化
temp->data.text=num;
temp->next=NULL;
//找到尾结点
Linklist*p=head;
while(p->next!=NULL)
{
p=p->next;
}
//插法插入数据
temp->next=p->next;
p->next=temp;
head->data.len++; //更新头结点中链表长度
return;
}
/*
* function: 判断链表是否为空
* @param [ in]
* @param [out]
* @return 为空返回1,不为空返回0
*/
int isEmpty_linklist(Linklist*head)
{
return head->next==NULL?1:0;
}
/*
* function: //头删法
* @param [ in]
* @param [out]
* @return
*/
datatype delete_linklistHead(Linklist*head)
{
//判断是否为空
if(isEmpty_linklist(head))
{
printf("链表为空,删除失败\n");
return (datatype)(-1);
}
Linklist*p=head->next;
head->next=p->next;
datatype num=p->data.text;
free(p);
p=NULL;
head->data.len--;
return num;
}
/*
* function: //尾删法
* @param [ in]
* @param [out]
* @return
*/
datatype delete_linklistRear(Linklist*head)
{
//判断是否为空
if(isEmpty_linklist(head))
{
printf("链表为空,删除失败\n");
return (datatype)(-1);
}
//找到倒数第二个结点
Linklist*p=head;
while(p->next->next!=NULL)
{
p=p->next;
}
datatype num=p->next->data.text;
free(p->next);
p->next=NULL;
head->data.len--;
return num;
}
/*
* function: //按位置插入
* @param [ in]
* @param [out]
* @return
*/
void insert_linklistByindex(Linklist*head,datatype num,datatype n)
{
Linklist*temp=(Linklist*)malloc(sizeof(Linklist));
if(NULL==temp)
{
printf("创建新节点失败,插入失败\n");
return;
}
Linklist*p=head;
for(int i=0;i<n-1;i++)
{
p=p->next;
}
temp->next=p->next;
p->next=temp;
temp->data.text=num;
head->data.len++;
return;
}
/*
* function: //按位置删除
* @param [ in]
* @param [out]
* @return
*/
datatype delete_linklistByindex(Linklist*head,datatype n)
{
if(isEmpty_linklist(head))
{
printf("链表为空,删除失败\n");
return (datatype)-1;
}
Linklist*p=head;
for(int i=0;i<n-1;i++)
{
p=p->next;
}
Linklist*q=p->next;
datatype num=p->next->data.text;
p->next=q->next;
head->data.len--;
return num;
}
数据结构单链表
最新推荐文章于 2024-08-09 16:47:28 发布