#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
typedef int data_t;
//整个节点的数据类型
typedef struct Node {
data_t data; //当前节点数据
struct Node *next; //下一节点地址
} node_t;
//初始化链表
node_t *CreateLinkList(void) {
node_t *head;
head = malloc(sizeof(node_t));//开辟头结点存储空间
if (head == NULL)
return head;
memset(head, 0, sizeof(node_t));
head->next = NULL;//设置头结点的指针域为NULL,表示没有后继结点
return head;
}
//插入数据
int InserLinkList(node_t *head, int local, data_t mydata) {
int i;
node_t *p = head;
node_t *q;
//判断位置是否满足
if (local < 0)
return -1;
//找到要插入的位置
for (i = 0; i < local && p != NULL; i++)
p = p->next;
if (p == NULL)
return -1;
//创建需要插入数据结点的空间
q = malloc(sizeof(node_t));
if (q == NULL)
return -1;
memset(q, 0, sizeof(node_t));
q->data = mydata;
//插入结点
q->next = p->next;
p->next = q;
return 0;
}
//遍历链表
void DispLinkList(node_t *head) {
node_t *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
//删除结点
void DeleteLinkList(node_t *head, int local) {
int i;
node_t *p = head;
node_t *q;
//判断链表是否为空
if (head->next == NULL)
return;
if (local < 0)
return;
//寻找到需要删除的地方
for (i = 0; i < local && p->next != NULL; i++)
p = p->next;
if (p == NULL)
return;
//删除结点
q = p->next;
p->next = q->next;
free(q);
}
//修改结点
int UpdateLinkList(node_t *head, int local, data_t newdata) {
int i;
node_t *p;
//判断链表是否为空
if (head->next == NULL)
return -1;
p = head->next;
//查找到指定的结点
for (i = 0; i < local && p != NULL; i++)
p = p->next;
if (p == NULL)
return -1;
//更改结点数据
p->data = newdata;
return 0;
}
//结点查询
int SelectLinkList(node_t *head, int local, data_t *mydata) {
int i;
node_t *p;
//判断链表是否为空
if (head->next == NULL)
return -1;
p = head->next;
//查找到指定的结点
for (i = 0; i < local && p != NULL; i++)
p = p->next;
if (p == NULL)
return -1;
//返回结点的数据信息
*mydata = p->data;
return 0;
}
数据结构之链表的基本操作(增删改查)
最新推荐文章于 2024-10-20 21:50:12 发布