单链表的增删改查代码

结构体

typedef int datatype;
typedef struct node_t
{
  datatype data;       // 数据域
  struct node_t *next; // 指针域,指向自身结构体的指针
} link_node_t, *link_list_t;

创建一个空的有头单向链表

link_node_t *createEmptyLinkList()
{
  link_list_t p = (link_list_t)malloc(sizeof(link_node_t));
  if (p == NULL)    //容错判断
  {
    perror("createEmptyLinkList malloc err");
    return NULL;
  }
  p->next = NULL;
  return p;
}

写入数据

尾插法

void tou(link_list_t p, int n)
{
  int i = 0;
  while (i < n)
  {
    while (p->next != NULL)
    {
      p = p->next;
    }
    link_list_t q = (link_list_t)malloc(sizeof(link_node_t));
    p->next = q;
    q->next = NULL;
    scanf("%d", &q->data);
    i++;
  }
}

链表指定位置插入数据

int insertIntoPostLinkList(link_node_t *p, int post, datatype data)
{
  int i = 0;
  while (i < post)
  {
    p = p->next;
    i++;
  }
  link_list_t q = (link_list_t)malloc(sizeof(link_node_t));
  q->next = p->next;
  q->data = data;
  p->next = q;
}

计算链表的长度

int lengthLinkList(link_node_t *p)
{
  int i = 0;
  while (p->next != NULL)
  {
    p = p->next;
    i++;
  }
  return i;
}

遍历链表

void showLinkList(link_node_t *p)
{
  while (p->next != NULL)
  {
    p = p->next;
    printf("%d", p->data);
  }
  printf("\n");
}

链表指定位置删除数据

int deletePostLinkList(link_node_t *p, int post)
{
  if (post < 0 || post >= lengthLinkList(p) || p->next == NULL)
  {
    return -1;
  }
  int i = 0;
  while (i < post)
  {
    p = p->next;
    if (i == post - 1)
    {
      link_list_t q = p->next;
      p->next = q->next;
      free(q);
    }
    i++;
  }
}

判断链表是否为空

int isEmptyLinkList(link_node_t *p)
{
  return p->next == NULL;
}

清空单向链表

void clearLinkList(link_node_t *p)
{
  link_list_t q = NULL;
  while (p->next != NULL)
  {
    q = p->next;
    p->next = q->next;
    free(q);
  }
}

修改指定位置的数据 post 被修改的位置 data修改成的数

int changePostLinkList(link_node_t *p, int post, datatype data)
{
  if (post < 0 || post >= lengthLinkList(p))
  {
    return -1;
  }
  int i = 0;
  while (i <= post)
  {
    p = p->next;
    if (i = post)
    {
      p->data = data;
    }
    i++;
  }
}

查找指定数据出现的位置 data被查找的数据 

int searchDataLinkList(link_node_t *p, datatype data)
{
  int i = 0;
  while (p->next != NULL)
  {
    if (p->data == data)
    {
      return i;
    }
    else
    {
      p = p->next;
    }
    i++;
  }
  return -1;
}

删除单向链表中出现的指定数据,data代表将单向链表中出现的所有data数据删除

int deleteDataLinkList(link_node_t *p, datatype data)
{
  link_list_t q;
  while (p->next != NULL)
  {
    if (p->next->data == data)
    {
      q = p->next;
      p->next = p->next->next;
      free(q);
    }
    else
    {
      p = p->next;
    }
  }
}

总代码

#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct node_t
{
  datatype data;       // 数据域
  struct node_t *next; // 指针域,指向自身结构体的指针
} link_node_t, *link_list_t;
//写入数据
void tou(link_list_t p,int n);
// 1.创建一个空的有头单向链表
link_node_t *createEmptyLinkList();
// 2.链表指定位置插入数据
int insertIntoPostLinkList(link_node_t *p, int post, datatype data);
// 3.计算链表的长度。
int lengthLinkList(link_node_t *p);
// 4.遍历链表
void showLinkList(link_node_t *p);
// 5.链表指定位置删除数据
int deletePostLinkList(link_node_t *p, int post);
// 6.判断链表是否为空
int isEmptyLinkList(link_node_t *p);
// 7.清空单向链表
void clearLinkList(link_node_t *p);
// 8.修改指定位置的数据 post 被修改的位置 data修改成的数据
int changePostLinkList(link_node_t *p, int post, datatype data);
// 9.查找指定数据出现的位置 data被查找的数据 //search 查找
int searchDataLinkList(link_node_t *p, datatype data);
// 10.删除单向链表中出现的指定数据,data代表将单向链表中出现的所有data数据删除
int deleteDataLinkList(link_node_t *p, datatype data);
int main()
{
  
}
// 创建一个空的有头单向链表
link_node_t *createEmptyLinkList()
{
  link_list_t p = (link_list_t)malloc(sizeof(link_node_t));
  if (p == NULL)
  {
    perror("createEmptyLinkList malloc err");
    return NULL;
  }
  p->next = NULL;
  return p;
}
// 写入数据
void tou(link_list_t p, int n)
{
  int i = 0;
  while (i < n)
  {
    while (p->next != NULL)
    {
      p = p->next;
    }
    link_list_t q = (link_list_t)malloc(sizeof(link_node_t));
    p->next = q;
    q->next = NULL;
    scanf("%d", &q->data);
    i++;
  }
}
// 链表指定位置插入数据
int insertIntoPostLinkList(link_node_t *p, int post, datatype data)
{
  int i = 0;
  while (i < post)
  {
    p = p->next;
    i++;
  }
  link_list_t q = (link_list_t)malloc(sizeof(link_node_t));
  q->next = p->next;
  q->data = data;
  p->next = q;
}
// 链表长度
int lengthLinkList(link_node_t *p)
{
  int i = 0;
  while (p->next != NULL)
  {
    p = p->next;
    i++;
  }
  return i;
}
// 遍历链表
void showLinkList(link_node_t *p)
{
  while (p->next != NULL)
  {
    p = p->next;
    printf("%d", p->data);
  }
  printf("\n");
}
// 删除指定位置
int deletePostLinkList(link_node_t *p, int post)
{
  if (post < 0 || post >= lengthLinkList(p) || p->next == NULL)
  {
    return -1;
  }
  int i = 0;
  while (i < post)
  {
    p = p->next;
    if (i == post - 1)
    {
      link_list_t q = p->next;
      p->next = q->next;
      free(q);
    }
    i++;
  }
}
int isEmptyLinkList(link_node_t *p)
{
  return p->next == NULL;
}
// 清空数据
void clearLinkList(link_node_t *p)
{
  link_list_t q = NULL;
  while (p->next != NULL)
  {
    q = p->next;
    p->next = q->next;
    free(q);
  }
}
// 修改数据
int changePostLinkList(link_node_t *p, int post, datatype data)
{
  if (post < 0 || post >= lengthLinkList(p))
  {
    return -1;
  }
  int i = 0;
  while (i <= post)
  {
    p = p->next;
    if (i = post)
    {
      p->data = data;
    }
    i++;
  }
}
// 查找指定的数据
int searchDataLinkList(link_node_t *p, datatype data)
{
  int i = 0;
  while (p->next != NULL)
  {
    if (p->data == data)
    {
      return i;
    }
    else
    {
      p = p->next;
    }
    i++;
  }
  return -1;
}
int deleteDataLinkList(link_node_t *p, datatype data)
{
  link_list_t q;
  while (p->next != NULL)
  {
    if (p->next->data == data)
    {
      q = p->next;
      p->next = p->next->next;
      free(q);
    }
    else
    {
      p = p->next;
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值