C语言实现单链表的增删改查

15 篇文章 0 订阅
14 篇文章 0 订阅
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct LNode {
	int data;
	struct LNode *next;
}LNode,*LinkList;
//初始化链表
LinkList LinkList_init(LinkList L)
{
	L = (LinkList)malloc(sizeof(LNode));
	return L;
}
//头插法建立单链表
LinkList LinkList_HeadInsert(LinkList L)
{
	LinkList s;
	int x;
	LinkList_init(L);
	scanf("%d",&x);
	//输入9999表示结束
	while (x != 9999)
	{
		s= (LinkList)malloc(sizeof(LNode));
		if (s == NULL)
		{
			return NULL;
		}
		s->next= L->next;
		s->data=x;
		L->next=s;
		scanf("%d",&x);
	}
	return L;
}
//尾插法建立单链表
LinkList LinkList_TailInsert(LinkList L)
{
	LinkList_init(L);
	LinkList s,r=L;
	int x;
	scanf("%d", &x);
	//输入9999表示结束
	while (x!= 9999)
	{
		s= (LinkList)malloc(sizeof(LNode));
		if (s == NULL)
		{
			return NULL;
		}
		r->next=s;
		s->data=x;
		s->next=NULL;
		r = s;
		scanf("%d",&x);
	}
	return L;
}
//按序号查找结点值
LinkList GetElem(LinkList L, int i)
{
	if (i < 1)
	{
		return NULL;
	}
	LinkList p = L->next;
	for (int j = 1; j < i&&p!=NULL; j++)
	{
		p = p->next;
	}
	return p;
}
//按值查找结点
LinkList LocateElem(LinkList L, int a)
{
	LinkList p = L->next;
	while (p->data != a && p != NULL)
	{
		p= p->next;
	}
	return p;
}//查找结点的位序
int LocatePos(LinkList L, int a)
{
	LinkList p = L->next;
	int i = 1;
	while (p->data != a && p != NULL)
	{
		p = p->next;
		i++;
	}
	return i;
}
//求表长
int LinkListLength(LinkList L)
{
	LinkList p = L;
	int i = 0;
	while (p != NULL)
	{
		i++;
		p= p->next;
	}
	return i;
}
//插入结点
bool Linklist_Insert(LinkList L,int num,int a)
{
	if (a < 1)
	{
		return false;
	}
	if (a == 1)
	{
		LinkList s = (LinkList)malloc(sizeof(LNode));
		if (s == NULL)
		{
			return false;
		}
		s->data = num;
		s->next = L->next;
		L->next = s;
		return true;
	}
	LinkList p = GetElem(L, a - 1);
	LinkList s = (LinkList)malloc(sizeof(LNode));
	if (s == NULL)
	{
		return false;
	}
	s->data = num;
	s->next = p->next;
	p->next = s;
	return true;
}
//删除结点
bool LinkList_Delete(LinkList L, int a)
{
	if (a < 1)
	{
		return false;
	}
	LinkList p = GetElem(L, a - 1);
	if (p == NULL)
	{
		return false;
	}
	LinkList q = p->next;
	p->next = q->next;
	free(q);
	return true;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是 C 语言单链表增删改查代码: ```c #include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 struct Node { int data; struct Node* next; }; // 定义链表头节点指针 struct Node* head = NULL; // 插入节点函数 void insertNode(int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; if (head == NULL) { head = newNode; } else { struct Node* temp = head; while (temp->next != NULL) { temp = temp->next; } temp->next = newNode; } printf("插入节点成功!\n"); } // 删除节点函数 void deleteNode(int data) { if (head == NULL) { printf("链表为空,无法删除!\n"); return; } struct Node* temp = head; if (temp->data == data) { head = head->next; free(temp); printf("删除节点成功!\n"); return; } while (temp->next != NULL && temp->next->data != data) { temp = temp->next; } if (temp->next == NULL) { printf("未找到要删除的节点!\n"); return; } struct Node* deleteNode = temp->next; temp->next = deleteNode->next; free(deleteNode); printf("删除节点成功!\n"); } // 修改节点函数 void modifyNode(int data, int newData) { if (head == NULL) { printf("链表为空,无法修改!\n"); return; } struct Node* temp = head; while (temp != NULL && temp->data != data) { temp = temp->next; } if (temp == NULL) { printf("未找到要修改的节点!\n"); return; } temp->data = newData; printf("修改节点成功!\n"); } // 查找节点函数 void searchNode(int data) { if (head == NULL) { printf("链表为空,无法查找!\n"); return; } struct Node* temp = head; while (temp != NULL && temp->data != data) { temp = temp->next; } if (temp == NULL) { printf("未找到要查找的节点!\n"); return; } printf("找到要查找的节点,数据为:%d\n", temp->data); } // 打印链表函数 void printList() { if (head == NULL) { printf("链表为空,无法打印!\n"); return; } struct Node* temp = head; printf("链表中的节点数据为:"); while (temp != NULL) { printf("%d ", temp->data); temp = temp->next; } printf("\n"); } int main() { insertNode(1); insertNode(2); insertNode(3); printList(); modifyNode(2, 4); printList(); searchNode(3); deleteNode(2); printList(); return 0; } ``` 以上是单链表的基本操作函数,包括插入节点、删除节点、修改节点、查找节点以及打印链表等功能。你可以根据需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值