链表111

主函数:

#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);
}

结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值