功能函数
#include <stdio.h>
#include <stdlib.h>
#include "3_linlist.h"
/*
* function: 创建一个单向链表
* @param [ in]
* @param [out]
* @return
*/
linklist* create_linklist(void)
{
linklist * head=(linklist*)malloc(sizeof(linklist));
if(NULL==head)
{
printf("空间申请失败\n");
return NULL;
}
head->data.len = 0;
head->next = NULL;
return head;
}
/*
* function: 写入数据(头插法)
* @param [ in]
* @param [out]
* @return
*/
void insert_linklist(linklist *head,datatype num)
{
linklist*temp=(linklist*)malloc(sizeof(linklist));
if(NULL==temp)
{
printf("申请结点失败");
return;
}
temp->next=NULL;
temp->data.text=num;
temp->next=head->next;
head->next=temp;
head->data.len++;
}
/*
* function: 遍历链表
* @param [ in]
* @param [out]
* @return
*/
void show_linklist(linklist*head)
{
linklist *p=head;
printf("现存数据\n");
while(p->next!=NULL)
{
p=p->next;
printf("%d\t",p->data.text);
}
printf("\n");
return;
}
/*
* function: 尾插法
* @param [ in]
* @param [out]
* @return
*/
void insertw_linklist(linklist*head,datatype num)
{
linklist *temp=(linklist*)malloc(sizeof(linklist));
linklist *p=head;
if(NULL==temp)
{
printf("尾插结点申请失败");
return;
}
while(p->next!=NULL)
{
p=p->next;
}
p->next=temp;
temp->data.text=num;
temp->next=NULL;
head->data.len++;
return;
}
/*
* function: 头删法
* @param [ in]
* @param [out]
* @return
*/
void head_delete_linklist(linklist *head,int n)
{
linklist *p=head;
if(NULL==p->next)
{
printf("链表为空");
return;
}
if(head->data.len<n)
{
printf("链表过短重新输入删除个数\n");
return;
}
p=p->next;
// free(p);
// p=p->next;
for(int i=0;i<n;i++)
{
free(p);
p=p->next;
head->data.len--;
}
head->next=p;
return;
}
/*
* function: 尾删法
* @param [ in]
* @param [out]
* @return
*/
datatype delete_wei_linklist(linklist*head)
{
if(NULL==head->next)
{
printf("链表为空");
return (datatype)(-1);
}
int i=0;
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_adr_linklist(linklist *head,int adr,datatype num)
{
if(adr>head->data.len+1)
{
printf("位置错误");
return;
}
linklist *temp=(linklist*)malloc(sizeof(linklist));
linklist *p=head;
int i=0;
for(i;i<adr-1;i++)
{
p=p->next;
}
temp->data.text=num;
temp->next=p->next;
p->next=temp;
head->data.len++;
return;
}
/*
* function: 按位置删除
* @param [ in]
* @param [out]
* @return
*/
datatype delete_adr_linklist(linklist *head,int adr)
{
if(NULL==head->next)
{
printf("链表为空");
return (datatype)(-1);
}
int i=0;
linklist *p=head;
linklist *p1=NULL;
while(p->next!=NULL)
{
p=p->next;
i++;
}
p=head;
if(adr>i)
{
printf("插入位置错误");
return (datatype)(0);
}
for(i=0;i<adr;i++)
{
p=p->next;
}
datatype num;
num=p->next->data.text;
free(p->next);
p->next=p->next->next;
head->data.len--;
return num;
}
/*
* function: 按位置查找数据
* @param [ in]
* @param [out]
* @return
*/
datatype find_linklist(linklist *head,int adr)
{
if(NULL==head->next)
{
printf("链表为空");
return (datatype)(-1);
}
if(adr>head->data.len)
{
printf("查询位置错误");
return (datatype)(0);
}
int i=0;
linklist *p=head;
for(i;i<adr;i++)
{
p=p->next;
}
int num=p->data.text;
return num;
}
主函数
#include <stdio.h>
#include <stdlib.h>
#include "3_linlist.h"
int main(int argc, const char *argv[])
{
datatype num;
linklist *head=create_linklist();
insert_linklist(head,1);
insert_linklist(head,2);
insert_linklist(head,3);
insertw_linklist(head,44);
insertw_linklist(head,45);
insertw_linklist(head,48);
show_linklist(head);
num=delete_wei_linklist(head);
printf("删除内容为num=%d\n",num);
num=delete_adr_linklist(head,2);
printf("按位置删除的num=%d\n",num);
show_linklist(head);
insert_linklist(head,46);
insert_linklist(head,47);
insert_linklist(head,49);
num=find_linklist(head,3);
show_linklist(head);
printf("按位查找的数据num=%d\n",num);
return 0;
}
头文件
#ifndef __linLIST__
#define __linLIST__
typedef int datatype;
typedef struct node{
union{
datatype text;
int len;
}data;
struct node *next;
}linklist;
linklist* create_linklist(void);
void insert_linklist(linklist *head,datatype num);
void show_linklist(linklist*head);
void insertw_linklist(linklist*head,datatype num);
void head_delete_linklist(linklist *head,int n);
void insert_adr_linklist(linklist *head,int adr,datatype num);
datatype delete_wei_linklist(linklist*head);
datatype delete_adr_linklist(linklist *head,int adr);
datatype find_linklist(linklist *head,int adr);
#endif
运行结果