链表增删改查

/*
	链表(带头结点,c++):
	1.新建链表,插入数组中的元素
	2.插入指定元素在第pos位置上
	3.查找指定元素
	4.删除指定元素
*/
#include <cstdio>
struct node{
	int in;
	node *next;
};

node *create(int a[]); //新建链表 
node *find(node *head, int x); //查找元素
void insert(node *head, int pos, int x); //插入元素 
void delet(node *head, int x); //删除指定元素 x
void change(node *temp, int x);  //修改元素 为x 
void print(node *head); //输出链表 

int main(){
	int a[5] = {5, 3, 6, 1, 2};
	node *head = create(a);
	print(head);
	
	insert(head, 3, 4); //第3个位置插入元素4 
	print(head);
	
	delet(head,3);
	print(head);
	
	node *fin = find (head, 10);
	change(fin, 7);
	print(head);
	 
	return 0;
}
node *create(int a[]){
	node *head = new node;
	head->next = NULL;
	node *temp, *pre = head;
	for (int i = 0; i < 5; i++){
		temp = new node;
		temp->next = NULL;
		temp->in = a[i];
		pre->next = temp;
		pre = temp;
	}
	return head;	
} 
void print(node *head){
	node *p = head->next;
	while (p != NULL){
		printf("%d ", p->in);
		p = p->next;
	}
	printf("\n");
}
void insert(node *head, int pos, int x){
	node *p = head;
	for (int i = 0; i < pos - 1; i++){
		if (p->next != NULL){
			p = p->next;
		}
	}
	node *temp = new node;
	temp->in = x;
	temp->next = p->next;
	p->next = temp;	
}
void delet(node *head, int x){
	node *pre = head, *p = head->next;
	while (p != NULL && p->in != x){
		pre = p;
		p = p->next;
	}
	if (p == NULL){
		printf("No Found!");
	}else {
		pre->next = p->next; 
	}
	delete(p);
}
node *find(node *head, int x){
	node *p = head->next;
	while (p != NULL){
		if (p->in != x){
			p = p->next;
		}else {
			break;
		}
	} 
	if (p == NULL){
		printf("not found\n");
		return NULL;
	}else {
		return p;
	}
} 
void change(node *temp, int x){
	if (temp != NULL){
		temp->in =x;
	}else {
		printf("chang error\n");
	}
}

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您介绍一下 C 语言中动态链表增删改查操作。 首先,我们需要定义一个链表结构体: ```c typedef struct Node { int data; struct Node *next; } Node, *LinkedList; ``` 其中,`data` 表示链表节点中存储的数据,`next` 表示指向下一个节点的指针。 接下来,我们可以实现链表的创建操作: ```c LinkedList createList() { LinkedList head = (LinkedList)malloc(sizeof(Node)); head->next = NULL; return head; } ``` 这个函数会返回一个链表头节点的指针,也就是一个空链表。 接下来,我们可以实现链表节点的插入操作: ```c void insertNode(LinkedList L, int data) { Node *newNode = (Node *)malloc(sizeof(Node)); newNode->data = data; newNode->next = L->next; L->next = newNode; } ``` 这个函数会在链表头节点后插入一个新的节点。 接下来,我们可以实现链表节点的删除操作: ```c void deleteNode(LinkedList L, int data) { Node *p = L; while (p->next != NULL && p->next->data != data) { p = p->next; } if (p->next == NULL) { printf("Not found!\n"); return; } Node *tmp = p->next; p->next = tmp->next; free(tmp); } ``` 这个函数会在链表中查找指定数据的节点,并删除它。 最后,我们可以实现链表节点的查找操作: ```c Node *findNode(LinkedList L, int data) { Node *p = L->next; while (p != NULL && p->data != data) { p = p->next; } return p; } ``` 这个函数会在链表中查找指定数据的节点,并返回它的指针。 以上就是 C 语言中动态链表增删改查操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值