链表的初始化、插入、删除、查询等操作(详细!)
最近在学习数据结构和算法,为了提高对代码的理解,把自己手写的代码分享出来,以下是代码:
//
// main.c
// List_0911
//
// Created by wangping on 2020/9/11.
// Copyright © 2020 yaomingzhu. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct Node
{
ElemType data;
struct Node* next;
}Node, *LinkList;
// 初始化链表
Status InitList(LinkList *L)
{
// 判断链表是不是空链表
if (!L)
{
return ERROR;
}
int data = 0;
// 创建头结点
Node *head = (Node *)malloc(sizeof(Node));
if (head == NULL)
{
exit(0);
}
// 头指针指向头结点
*L = head;
printf("请输入结点数据, 0代表结束初始化:\n");
while (1)
{
scanf("%d", &data);
if (data == 0)
{
break;
}
// 创建结点
Node *node = (Node *)malloc(sizeof(Node));
if (node == NULL)
{
exit(0);
}
node->data = data;
node->next = NULL;
head->next = node;
head = node;
}
return OK;
}
// 在L中第i个位置之前插入数据元素e
Status ListInsert(LinkList *L, int i, ElemType e)
{
int