单链表操作————C语言描述

这篇博客介绍了如何使用C语言实现单链表的基本操作,包括创建空链表、判断链表是否为空、根据值查找节点、在节点前后插入新节点、查找前驱节点、删除指定值节点和按节点位置删除。示例代码展示了插入和删除操作,并打印链表内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单链表上运算的实现:

#include<stdio.h>
#include<stdlib.h>

struct Node;
typedef struct Node *PNode;
typedef int DataType;
struct Node{
	DataType info;
	PNode link;
};
typedef struct Node *LinkList;

LinkList createNullList_link(void)        //创建空链表 
{
	LinkList llist = (LinkList)malloc(sizeof(struct Node));
	
	if(llist!=NULL)llist->link = NULL;
	else printf("Out of space!\n");
	return llist;
}

int isNullList_link(LinkList llist)      //判断链表是否为空 
{
	return (llist->link == NULL);
}

PNode locate_link(LinkList llist,DataType x)     //根据值返回节点位置 
{
	PNode p;
	if(llist == NULL)return NULL;
	p = llist->link;
	while(p!=NULL && p->info!=x)p = p->link;
	return p;
}

int insertPost_link(LinkList llist,PNode p,DataType x)     //在节点p后插入值为x的新节点 
{
	PNode q = (PNode)malloc(sizeof(struct Node));
	if(q==NULL){
		printf("Out of space!!!\n");
		return 0;
	}
	else
	{
		q->info = x;
		q->link = p->link ;
		p->link = q;
		return 1;
	}
}

int insertPre_link(LinkList llist,PNode p,DataType x)    //在节点p前插入值为x的新节点 
{
	PNode q = (PNode)malloc(sizeof(struct Node));
	PNode p_pre = llist->link;
	while(p_pre!=NULL && p_pre->link !=p)p_pre = p_pre->link;
	if(q==NULL){
		printf("Out of space!!!\n");
		return 0;
	}
	else{
		q->info = x;
		q->link = p_pre->link ;
		p_pre->link = q;
		return 1; 
	}	
}

PNode locatePre_link(LinkList llist,PNode p)      //返回P节点的前驱节点 
{
	PNode p1;
	if(llist == NULL)return NULL;
	p1 = llist;
	while(p1!=NULL && p1->link!=p)p1=p1->link ;
	return p1;
}

int deleteV_link(LinkList llist,DataType x)      //根据值删除节点 
{
	PNode p,q;
	p = llist;
	if(p == NULL)return 0;
	while(p->link!=NULL && p->link->info!=x)
		p = p->link;
	if(p->link == NULL){
		printf("Not exist!\n");
		return 0;
	}
	else{
		q = p->link;
		p->link = q->link ;
		free(q);
		return 1;
	}
}

int deleteP_link(LinkList llist,PNode p)           //根据节点位置进行删除操作 
{
	PNode p1 = locatePre_link(llist,p);
	if(p1!=NULL)
	{
		p1->link = p->link ;
		free(p);
		return 0;
	}
	return 1;
}

void linkprint(LinkList llist){         //打印所有节点的值 
	PNode p = llist->link;
	while(p!=NULL){
		printf("%d ",p->info );
		p=p->link ;
	}
}

int main(){
	LinkList llist = createNullList_link();
	PNode p1 = llist;
	int flag1 = insertPost_link(llist,p1,1);
	p1 = p1->link;
	int flag2 = insertPost_link(llist,p1,2);
	p1 = p1->link;
	int flag3 = insertPost_link(llist,p1,3);
	p1 = p1->link;
	int flag4 = insertPost_link(llist,p1,4);
	p1 = p1->link;
	int flag5 = insertPost_link(llist,p1,5);
	printf("\n");
	linkprint(llist);
	printf("\n");
	int flag6 = deleteV_link(llist,4);
	linkprint(llist);
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值