数据结构之链表

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
//定义一个链表节点类型
typedef struct node{
	int data;//存储数据
	struct node *next;//指向下一个节点的指针
}LinkNode;
//创建链表,将头地址返回
LinkNode * createLinkList() {
	LinkNode *head = (LinkNode *)malloc(sizeof(LinkNode));//开辟一个节点空间,将节点地址赋值给head指针变量
	head->next = NULL;//将节点的指向下一个节点的指针变量赋值为NULL
	return head;//返回
}
//数据插入
void insertLinkeNode(LinkNode *head,int data) {
	LinkNode *p, *q;//定义两个指针变量
	p = head;
	while (p->next != NULL) {
		p = p->next;//指针指向链表的下一个节点
	}
	q = (LinkNode *)malloc(sizeof(LinkNode));//创建节点
	q->data = data;//数据赋值
	q->next = NULL;//将节点的指向下一个节点的指针变量赋值为NULL
	p->next = q;//链表尾节点连接新节点
}
//数据输出,遍历链表
void ergodicLinkList(LinkNode *head) {
	LinkNode *p = head->next;//因为头节点默认不存储数据,所以跳过头节点输出数据
	while (p != NULL) {
		printf("%d\t",p->data);
		p = p->next;//指向下一个节点的地址
	}
	printf("\n");
}
//数据删除
void deleteLinkeNode(LinkNode *head, int deleteData) {
	LinkNode *p, *q;
	p = head;//指针变量p指向头节点
	q = p->next;//指向头节点的下一个节点
	while (q != NULL && q->data != deleteData) {//当q所指向的节点不为空并且数据不等于要删除的节点数据时
		p = q;//继续向下查找
		q = p->next;
	}
	if (q == NULL) {
		printf("要输出的节点数据不在链表中,无法删除");
	}
	else {
		p->next = q->next;//将q指向的节点杀死
		free(q);
	}
}
int main()
{
	LinkNode  *head;//定义一个指向头节点的指针变量
	int data[10] = {1,2,3,4,5,6,7,8,9,10};//数据
	head = createLinkList();
	int i;
	for (i = 0; i < 10; i++) {
		insertLinkeNode(head, data[i]);
	}
	ergodicLinkList(head);//遍历输出链表
	deleteLinkeNode(head, 4);//删除节点中数据为4的节点
	ergodicLinkList(head);//遍历输出链表
	system("pause");//调用系统的暂停函数
	return 0;
}

上面就是单链表的增删查改,希望读者仔细阅读理解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值