链表的基础操作实现

首先是构造链表

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct{
	int *elem;
	int length;
}SqList;//定义一个结构体 
void InitList(SqList *L)//构造一个空的链表 
{
	L->elem=(int *)malloc(MAXSIZE*sizeof(int));//申请一块动态内存 
	if(L->elem)//如果申请成功 
	{
		L->length=0;
		printf("申请成功\n");
	}
	else
		printf("申请失败\n");
}
int main()
{
	SqList L;
	InitList(&L);
	return 0;
}

然后是填充这个链表(插入链表)

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct{
	int *elem;
	int length;
}SqList;//定义一个结构体 
int InitList(SqList *L)//构造一个空的链表 
{
	L->elem=(int *)malloc(MAXSIZE*sizeof(int));//申请一块动态内存 
	if(L->elem)//如果申请成功 
	{
		L->length=0;
		return 1;
	}
	else
		return 0;
}
int ListInsert(SqList *L,int i,int e)//填充链表(插入数据) 
{
	int j;
	if((i<1)||(i>L->length+1))//插入的位置不能小于1或者大于链表长度+1 
		return 0;
	if(L->length==MAXSIZE)//链表长度超出分配的内存 
		return 0;	
	for(j=L->length-1;j>=i-1;j--)//将插入的位置腾出来 
		L->elem[j+1]=L->elem[j];
	L->elem[i-1]=e;//将元素插入 
	++L->length;//链表长度+1 
	return 1;
}
int main()
{
	SqList L;
	int i,n,e,m;
	InitList(&L);
	printf("请输入链表的长度:");
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&e);//输入要插入到链表内的内容 
		ListInsert(&L,1,e);//每次都插入到第一个位置上(相当于倒叙插入) 
	}
	for(i=L.length-1;i>=0;i--)//将链表输出 
		printf("%d ",L.elem[i]);
	return 0;
}

然后是链表的取值

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct{
	int *elem;
	int length;
}SqList;//定义一个结构体 
int InitList(SqList *L)//构造一个空的链表 
{
	L->elem=(int *)malloc(MAXSIZE*sizeof(int));//申请一块动态内存 
	if(L->elem)//如果申请成功 
	{
		L->length=0;
		return 1;
	}
	else
		return 0;
}
int ListInsert(SqList *L,int i,int e)//填充链表(插入数据) 
{
	int j;
	if((i<1)||(i>L->length+1))//插入的位置不能小于1或者大于链表长度+1 
		return 0;
	if(L->length==MAXSIZE)//链表长度超出分配的内存 
		return 0;	
	for(j=L->length-1;j>=i-1;j--)//将插入的位置腾出来 
		L->elem[j+1]=L->elem[j];
	L->elem[i-1]=e;//将元素插入 
	++L->length;//链表长度+1 
	return 1;
}
int GetElem(SqList *L,int i)//取值链表 
{
	int e;
	if(i<1||i>L->length)
		return 0;
	e=L->elem[i-1];//值为下标-1 
	return e;
} 
int main()
{
	SqList L;
	int i,n,e,m;
	InitList(&L);
	printf("请输入链表的长度:");
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&e);//输入要插入到链表内的内容 
		ListInsert(&L,1,e);//每次都插入到第一个位置上(相当于倒叙插入) 
	}
	printf("请输入要输出第i位的链表值的i为:");
	scanf("%d",&i); 
	m=GetElem(&L,i);
	printf("第%d位的值为:%d",i,m);
	return 0;
}

链表的查找

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct{
	int *elem;
	int length;
}SqList;//定义一个结构体 
int InitList(SqList *L)//构造一个空的链表 
{
	L->elem=(int *)malloc(MAXSIZE*sizeof(int));//申请一块动态内存 
	if(L->elem)//如果申请成功 
	{
		L->length=0;
		return 1;
	}
	else
		return 0;
}
int ListInsert(SqList *L,int i,int e)//填充链表(插入数据) 
{
	int j;
	if((i<1)||(i>L->length+1))//插入的位置不能小于1或者大于链表长度+1 
		return 0;
	if(L->length==MAXSIZE)//链表长度超出分配的内存 
		return 0;	
	for(j=L->length-1;j>=i-1;j--)//将插入的位置腾出来 
		L->elem[j+1]=L->elem[j];
	L->elem[i-1]=e;//将元素插入 
	++L->length;//链表长度+1 
	return 1;
}
int LocateElem(SqList *L,int e)
{
	int i;
	for(i=0;i<L->length;i++)
		if(L->elem[i]==e)
			return i+1;
	return -1;
}
int main()
{
	SqList L;
	int i,n,e,m;
	InitList(&L);
	printf("请输入链表的长度:");
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&e);//输入要插入到链表内的内容 
		ListInsert(&L,1,e);//每次都插入到第一个位置上(相当于倒叙插入) 
	}
	printf("请输入要查找的数:");
	scanf("%d",&i); 
	m=LocateElem(&L,i);
	if(m==-1)
		printf("链表中不存在\n");
	else
		printf("要查找的数在第%d个位置",m);
	return 0;
}

链表的删除

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct{
	int *elem;
	int length;
}SqList;//定义一个结构体 
int InitList(SqList *L)//构造一个空的链表 
{
	L->elem=(int *)malloc(MAXSIZE*sizeof(int));//申请一块动态内存 
	if(L->elem)//如果申请成功 
	{
		L->length=0;
		return 1;
	}
	else
		return 0;
}
int ListInsert(SqList *L,int i,int e)//填充链表(插入数据) 
{
	int j;
	if((i<1)||(i>L->length+1))//插入的位置不能小于1或者大于链表长度+1 
		return 0;
	if(L->length==MAXSIZE)//链表长度超出分配的内存 
		return 0;	
	for(j=L->length-1;j>=i-1;j--)//将插入的位置腾出来 
		L->elem[j+1]=L->elem[j];
	L->elem[i-1]=e;//将元素插入 
	++L->length;//链表长度+1 
	return 1;
}
int ListDelete(SqList *L,int i)
{
	int j;
	if(i<1||i>MAXSIZE)
		return 0;
	for(j=i-1;j<L->length;j++)
		L->elem[j]=L->elem[j+1];
	--L->length;
	return 1;
} 
int main()
{
	SqList L;
	int i,n,e,m;
	InitList(&L);
	printf("请输入链表的长度:");
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&e);//输入要插入到链表内的内容 
		ListInsert(&L,1,e);//每次都插入到第一个位置上(相当于倒叙插入) 
	}
	printf("请输入要删除的位置:");
	scanf("%d",&i); 
	ListDelete(&L,i);
	for(i=L.length-1;i>=0;i--)//将链表输出 
		printf("%d ",L.elem[i]);
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值