主函数:
#include"head.h"
int main(int argc, const char *argv[])
{
linklist l=NULL;
int n;
datatype e;
printf("输入n");
scanf("%d",&n);
/* for(int i=0;i<n;i++)
{
printf("输入");
scanf("%d",&e);
//l头指针
//头插
l=toucha(e,l);
}
output(l);*/
for(int i=0;i<n;i++)
{
printf("输入");
scanf("%d",&e);
//l头指针
//尾插
l=weicha(e,l);
}
int t,a;
printf("输入修改的位置和值\n");
scanf("%d%d",&t,&a);
l=rengyixiugai(t,a,l);
int j;
printf("输入要查找的下标");
scanf("%d",&j);
rengyichazhao(j,l);
output(l);
return 0;
}
头文件:
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int datatype;
typedef struct Node
{
//数据元素
datatype b;
//指针y
struct Node *nist;
}*linklist;
linklist toucha(datatype e,linklist l);
linklist chuangjiedian();
linklist output(linklist l);
linklist weicha(datatype e,linklist l);
linklist toushan(linklist l);
linklist weishan(linklist l);
datatype len(linklist l);
linklist rengyixiugai(datatype t,datatype a,linklist l);
void rengyichazhao(datatype t,linklist l);
#endif
test文件
#include"head.h"
linklist chuangjiedian()//在堆区创一个空间
{
linklist node=(linklist)malloc(sizeof(struct Node));
if(node==NULL)
{
return NULL;
}
node->b=0;
node->nist=NULL;
return node;
}
linklist toucha(datatype e,linklist l)//头插
{
linklist node=chuangjiedian();
node->b=e;
node->nist=l;//让堆区的空间指向l
l=node;
return l;
}
linklist output(linklist l)//输出函数
{
//判断是否创建
//判断是否为空
if(NULL==l)
{
return -1;
}
while(l!=NULL)
{
printf("%d\t",l->b);
l=l->nist;
}
puts("");
}
linklist weicha(datatype e,linklist l)//尾插
{
linklist node=chuangjiedian();
node->b=e;
if(l==NULL)
{
l=node;
}
else
{
linklist s=l;
while(s->nist!=NULL)
{
s=s->nist;
}
s->nist=node;
}
return l;
}
linklist toushan(linklist l)//头删
{
if(l==NULL)//链表是否为空
{
return l;
}
if(l->nist==NULL)//后一个为空直接清空
{
free(l);
l=NULL;
}
else
{
linklist q=l->nist;//定义一个指针指向第二个元素
l->b=q->b;//值覆盖
l->nist=q->nist;//地址覆盖
free(q);//清空指针
q=NULL;
}
return l;
}
linklist weishan(linklist l)//尾删
{
if(l==NULL)//链表为空直接返回
{
return NULL;
}
else if(l->nist==NULL)//判断是否为一个数
{//一个数直接free
free(l);
l=NULL;
}
else
{
linklist s=l;
while(s->nist->nist!=NULL)//后面的后面为空
{
s=s->nist;//后移
}
free(s->nist);//清空
s->nist=NULL;
}
return l;
}
int len(linklist l)//链的长度len
{
int count=0;
while(l!=NULL)
{
l=l->nist;
count++;
}
return count;
}
linklist rengyixiugai(datatype t,datatype a,linklist l)//任意位置修改
{
if(l==NULL||t<0||t>len(l))
{
return -1;
}
linklist p=l;
for(int i=1;i<t;i++)
{
p=p->nist;
}
p->b=a;
return l;
}
void rengyichazhao(datatype t,linklist l)//任意查找
{
if(l==NULL||t<0||t>len(l))
{
return -1;
}
linklist p=l;
for(int i=1;i<t;i++)
{
p=p->nist;
}
printf("位置j的数为=%d\n",p->b);
}
结果: