数据结构——单链表

简介: 数据结构——单链表


目录

建立节点

初始化

尾插法建立单链表

头插法建立单链表

单链表的遍历

单链表的查询

单链表的删除

单链表的插入

        单链表的逆序(三指针法)

链表的销毁


建立节点

typedef struct node
{
  char name[20]; //姓名
  int number;  //学号
  struct node* next;//指针域
}Node;

初始化

Node* InitList()
{
  Node* head;
  head = (Node*)malloc(sizeof(Node));
  head->next = NULL;
  return head;
}

尾插法建立单链表

void CreatByRear(Node* head)
{
  Node* r, * s;
  char name[20];
  int number;
  r = head;
  while (1)
  {
    scanf("%s", name);
    scanf("%d", &number);
    if (number == 0)
      break;
    s = (Node*)malloc(sizeof(Node));
    strcpy(s->name, name);
    s->number = number;
    r->next = s;//原来的节点指向新节点
    r = s;//r指向新的节点
  }
  r->next = NULL;
}

头插法建立单链表

void CreatByHead(Node* head)
{
  Node* s;
  char name[20];
  int number;
  printf("请输入学生的姓名和学号");
  while (1)
  {
    scanf("%s", name);
    scanf("%d", &number);
    if (number == 0)
      break;
    s = (Node*)malloc(sizeof(Node));
    strcpy(s->name, name);
    s->number = number;
    s->next = head->next;
    head->next = s;
  }
}

单链表的遍历

void OutPut(Node*head)
{
  Node* p = head->next;
  while (p)
  {
    printf("姓名:  %s\n", p->name);
    printf("学号:  %d\n\n\n", p->number);
    p = p->next;
  }
}

单链表的查询

Node* FindNote(Node* head,int x)//查找第x个节点(包含头节点)
{
  Node* p = head;
  while (p && x > 1)
  {
    p = p->next;
    x--;
  }
  if (!p)
  {
    printf("该节点不存在");
  }
  else
    return p;
}

单链表的删除

void Delete(Node* head, int i)
{
    if (i == 1)//头删
  {
    Node* cur = head->next;
    head->next = cur->next;
    free(cur);
    return;
  }
  Node* p = FindNote(head, i-1);
  Node* q= FindNote(head, i);
  p->next = q->next;
  free(q);
}

单链表的插入

void Insert(Node* head, int i)
{
    printf("请输入要插入学生的姓名和学号");
    scanf("%s", s->name);
  scanf("%d", &s->number);
    Node* s = (Node*)malloc(sizeof(Node));
  Node* p = FindNote(head, i);
    if (k == 1)//头插
  {
    s->next = head->next;
    head->next = s;
    return;
  }
  s->next = p->next;
  p->next = s;
}

单链表的逆序(三指针法)

void Reverse(Node* head)
{
  Node* p,* q, *r=NULL;
  p = head->next;
  q = p->next;
  p->next = NULL;
  while (q)
  {
    r = q;
    q = q->next;
    r->next = p;
    p = r;
  }
  head->next = r;
}

链表的销毁

//链表的销毁
void DestoryList(Node*head)
{
  Node* p = head->next;
  Node* q = p;
  while (p)
  {
    p = p->next;
    free(q);
    q = p;
  }
}
相关文章
|
4月前
【数据结构】单链表(长期维护)(1)
【数据结构】单链表(长期维护)(1)
|
2月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
46 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
2月前
|
存储
[数据结构] -- 单链表
[数据结构] -- 单链表
26 1
|
3月前
|
存储 Java
java数据结构,线性表链式存储(单链表)的实现
文章讲解了单链表的基本概念和Java实现,包括头指针、尾节点和节点结构。提供了实现代码,包括数据结构、接口定义和具体实现类。通过测试代码演示了单链表的基本操作,如添加、删除、更新和查找元素,并总结了操作的时间复杂度。
java数据结构,线性表链式存储(单链表)的实现
|
2月前
|
存储
【数据结构】——单链表实现
【数据结构】——单链表实现
|
2月前
|
存储
数据结构2——单链表
数据结构2——单链表
38 1
|
2月前
|
存储
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)(一)
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)
|
2月前
|
存储
数据结构(单链表)
数据结构(单链表)
21 0
|
2月前
|
存储
数据结构--单链表
数据结构--单链表
|
3月前
|
存储 算法 C语言
数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
本文详细介绍了单链表的理论知识,涵盖单链表的定义、优点与缺点,并通过示例代码讲解了单链表的初始化、插入、删除、查找等核心操作。文中还具体分析了按位序插入、指定节点前后插入、按位序删除及按值查找等算法实现,并提供了尾插法和头插法建立单链表的方法,帮助读者深入理解单链表的基本原理与应用技巧。
678 6