c语言-单链表的增删改查(简单版)

在学了链表之后,自己也能写出一个简单的链表结构,这里就将自己的代码分享一下。如果发现有不足之处,欢迎指出。

1.创建结构体

typedef struct dnode
{
   
	int data;
	struct dnode *next;
}snode,*ptr;

2.实现向后插入法构造链表函数

这里返回的是head,

ptr initlink()//初始化链表并插入元素(向后插入)
{
   
	ptr head,last,p;
	int x,i,n;
    head=last=(ptr)malloc(sizeof(snode));
    last->next=NULL;
	printf("请输入要输入几个数:");
    scanf("%d",&n);//读入第一个元素
    for(i=0;i<n;i++)//当读的不是结束标记继续循环
    {
   
		printf("请输入第%d个想加入的数字:",i+1);
		scanf("%d",&x);//读入元素
        p=(ptr)malloc(sizeof(snode));//申请一个存储节点
    	p->data=x;//置结点的值域
    	last->next=p;
    	p->next=NULL;
    	last=p;
    }
    p=head;head=head->next;free(p);//删除辅助结点
    return(head);//返回表头指针
}

3.实现按顺序显示链表函数

void showlink(ptr p){
   //显示链表所有元素
	printf("您现在的链表为:");
	while(p!=NULL){
   
		printf("%d  ",p->data);
		p=p->next;
	}
	printf("\n");
}

4.实现按值查找函数

判断放在了主函数,如果返回值是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、付费专栏及课程。

余额充值