代码分为3个部分,test.c ,head.h list.c
list.c封装的函数
#include"head.h"
//创建一个空链表
Linklist list_creat()
{
//申请一断空间
Linklist L;
L=(Linklist)malloc(sizeof(Lnode));
if(L==NULL)
{
printf("apply is fail\n");
return L;
}
L->date=0;
L->next=NULL;
return L;
}
//尾插法
int list_inset_tail(Linklist L,int value)
{
Linklist p,s;
p=L;
s=(Linklist )malloc(sizeof(Lnode));
s->date=value;
while(p->next)
{
p=p->next;
}
s->next=NULL;
p->next=s;
return 0;
}
/*
//尾插法也就是正常的输入和输出
Linklist list_inset_tail()
{
Linklist L,r,p;
int value;
L=(Linklist)malloc(sizeof(Lnode));
if(L==NULL)
{
printf("apply is fail\n");
return NULL;
}
L->date=0;
L->next=NULL;
r=L;
while(1)
{
printf("please input date:\n");
scanf("%d",&value);
if(value==-1)
{
break;
}
p=(Linklist)malloc(sizeof(Lnode));//创建一个新结点
if(p==NULL)
{
printf("apply is fail\n");
return NULL;
}
p->date=value;
p->next=NULL;
r->next=p;
r=p;
}
return L;
}*/
//通过位置来查找
Linklist list_find(Linklist L,int n)
{
Linklist p;
int j=0;
//p=L;//p指向头结点
p=L->next;
if(n<0)
{
printf("list is full\n");
return NULL;
}
/* while(p->next&&j<n)//进行遍历
{
p=p->next;
j++;
}*/
while(p&&j<n)
{
p=p->next;
j++;
}
/* if(!p||j>n)//
{
printf("n值不合法\n");
return NULL;
}
else
{
return p;
}*/
if(j==n)
{
return p;
}
else
{
printf("输入的n值太大\n");
return NULL;
}
}
//按数值进行查找
Linklist list_pos_find(Linklist L,int value)
{
Linklist p;
p=L->next;//指向首元结点
while(p&&p->date!=value)
{
p=p->next;
}
return p;
}
//插入数据使用的头插法
int list_inset_head(Linklist L,int value)
{
Linklist p;//创建一个结点
p=(Linklist)malloc(sizeof(Lnode));
if(p==NULL)
{
printf("apply is fail\n");
return -1;
}
p->date=value;
p->next=L->next;
L->next=p;
return 0;
}
//插入某个位置数据
int list_pos_inset(Linklist L,int i,int value)
{
Linklist p,s;
//先查找位置才能进行插入数据
if(i==0)//如果在0位置
{
p=L;
}
else
{
p=list_find(L,i-1);//按位置进行查找
}
s=(Linklist)malloc(sizeof(Linklist));//创建一个结点
if(s==NULL)
{
printf("apply is fail\n");
return 1;
}
else
{
s->date=value;
s->next=p->next;
p->next=s;
}
return 0;
}
//在某个位置删除数据需要找到的它的前驱
int list_del(Linklist L,int i)
{
Linklist p,q;
if(i==0)//第一个元素
{
p=L;
}
else
{
p=list_find(L,i-1);//按位置进行查找
}
if(p==NULL||p->next==NULL)
{
printf("del is fail\n");
return 1;
}
else
{
q=p->next;//用于临时保存指针变量
p->next=q->next;
free(q);//申请这个结点需要释放
q=NULL;
return 0;
}
}
//实现函数中的数据倒置使用头指针
void list_up_down(Linklist L)
{
Linklist q,p;
p=L->next;//指向首元结点
L->next=NULL;
while(p)
{
q=p;
p=p->next;
q->next=L->next;
L->next=q;
}
}
//删除头结点
int list_del_head(Linklist L)
{
int value;
Linklist s,p;
p=L;
s=p->next;
value=s->date;
p->next=s->next;
free(s);
s=NULL;
return value;
}
//删除尾结点
int list_del_tail(Linklist L)
{
int value;
Linklist p,s;
p=L;
while(p->next->next!=NULL)
{
p=p->next;
}
s=p->next;
value=s->date;
free(s);
s=NULL;
p->next=NULL;
return value;
}
//遍历
void list_show(Linklist L)
{
while(L->next)//判断指针是否为空
{
printf("%d ",L->next->date);
L=L->next;//指针指向下一个结点
}
}
head.h同文件
#ifndef __HEAD_H
#define __HEAD_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//创建一个结构体
typedef struct list {
int date;
struct list *next;
}Lnode,*Linklist;
//函数的声明
Linklist list_creat();
int list_inset_head(Linklist L,int value);
void list_show(Linklist L);
int list_inset_tail(Linklist L,int value);
//Linklist list_inset_tail();
Linklist list_find(Linklist L,int n);
Linklist list_pos_find(Linklist L,int value);
int list_pos_inset(Linklist L,int i,int value);
int list_del(Linklist L,int i);
void list_up_down(Linklist L);
int list_del_head(Linklist L);
int list_del_tail(Linklist L);
int list_del_date(Linklist L);
int list_update_pos(Linklist L,int pos,int value);
void list_change_old(Linklist L,int oldate,int newdate);
#endif
test.c
#include"head.h"
int main(int argc ,char *argv[])
{
Linklist L;
// int x1,x2'
// int x;
L=list_creat();
list_inset_tail(L,10);
list_inset_tail(L,20);
list_inset_tail(L,30);
list_inset_tail(L,40);
list_inset_tail(L,50);
list_show(L);
list_change_old(L,20,100);
list_show(L);
/* list_update_pos(L,2,80);
list_show(L);*/
/*list_del_date(L);
list_show(L);*/
/* list_del_head(L);
list_show(L);
list_del_tail(L);
list_show(L);*/
/* list_inset_head(L,10);
list_inset_head(L,20);
list_inset_head(L,30);
list_inset_head(L,40);
list_inset_head(L,50);
list_show(L);*/
/* list_up_down(L);
list_show(L);*/
/* printf("intput is a value:");
scanf("%d",&x);
list_del(L,x);
list_show(L);*/
/* printf("input is two value:");
scanf("%d %d",&x1,&x2);
list_pos_inset(L,x1,x2);
list_show(L);*/
/*
printf("input is a value:");
scanf("%d",&x);
p=list_find(L,x);
if(p==NULL)
{
printf("is not find\n");
}
else
{
printf("%d\n",p->date);
}*/
/* L=list_inset_tail();
list_show(L);*/
/* printf("input is a value\n");
scanf("%d",&x);
p=list_find(L,3);
printf("%d\n",p->date);
*/
/* L=list_inset_tail();
list_show(L);*/
return 0;
}