#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;
}
数据结构之链表
最新推荐文章于 2022-10-19 19:58:10 发布