20002.数据结构C++ 单向链表

简介: 20002.数据结构C++ 单向链表
# include<iostream>
typedef int ElemType;
typedef struct Lnode {
  ElemType data;
  struct Lnode* next;
}Lnode, *Linklist;
bool InitList_L(Linklist& L) {
  /*
    初始化单向链表。
  */
  L = new Lnode;
  if (!L)
    return false;
  L->next = NULL;
  return true;
}
bool CreateList_H(Linklist& L) {
  /*
    创建单向链表。
  */
  int x = 1;
  std::cout << "请输入您要插入的数字" << std::endl;
  std::cin >> x;
  while (x != -1) {
    /*
      使用头插法建立单向链表。
    */
    Linklist p;
    p = new Lnode;
    if (!L)
      return false;
    p->data = x;
    p->next = L->next;
    L->next = p;
    std::cout << "请输入您要插入的数字" << std::endl;
    std::cin >> x;
  }
  return true;
}
bool CreateList_T(Linklist L) {
  /*
    使用尾插法,建立单向链表。
  */
  int x;
  std::cout << "请输入您要插入的数字,-1表示结束" << std::endl;
  std::cin >> x;
  Linklist p, q;
  p = L; // 创建尾部指针。
  while (x != -1) {
    q = new Lnode;
    if (!q)
      return false;
    q->data = x;
    q->next = NULL;
    p->next = q;
    p = q;
    std::cout << "请输入您要插入的数字,-1表示结束" << std::endl;
    std::cin >> x;
  }
}
void PrintList(Linklist& L) {
  Linklist p;
  p = L->next;
  while (p != NULL) {
    std::cout << p->data << std::endl;
    p = p->next;
  }
}
bool GetElem_L(Linklist L, int i, int& e) {
  /*
    获取列表第i个元素的值
  */
  Linklist q;
  q = L->next;
  if (i < 1)
    return false;
  if (!q)
    return false;
  int j = 0;
  while (j < i - 1) {
    q = q->next;
    if (!q)
      return false;
    j++;
  }
  e = q->data;
  return true;
}
bool LocateElem_L(Linklist L, int e) {
  /*
    查找单向链表中的元素;
  */
  Linklist p;
  p = L;
  while (p && p->data != e) {
    p = p->next;
  }
  if (!p)
    return false;
  return true;
}
bool ListInsert_L(Linklist& L, int i, int e) {
  Linklist p, q;
  p = L->next;
  if (i < 1)
    return false;
  int j = 0;
  while (j < i - 2 && p) {
    p = p->next;
    j++;
  }
  if (j != i - 2)
    return false;
  q = new Lnode;
  q->data = e;
  q->next = p->next;
  p->next = q;
  return true;
}
bool ListDelete_L(Linklist& L, int i) {
  Linklist p, q;
  p = L->next;
  int j = 0;
  while (p && j < i - 2) {
    p = p->next;
    j++;
  }
  if (j != i - 2)
    return false;
  q = p->next;
  p->next = p->next->next;
  delete q;
  return true;
}
int main() {
  Linklist L;
  InitList_L(L);
  CreateList_H(L);
  //CreateList_T(L);
  int x, e;
  //std::cout << "请输入您要获取第几个元素的值" << std::endl;
  //std::cin >> x;
  //GetElem_L(L, x, e);
  //std::cout << "程序获取的元素为:" << e << std::endl;
  //std::cout << "请输入您要查找的数据" << std::endl;
  //std::cin >> e;
  //std::cout << LocateElem_L(L, e) << std::endl;
  //std::cout << "请输入您要插入元素的位置" << std::endl;
  //std::cin >> x;
  //std::cout << "请输入您要插入的元素" << std::endl;
  //std::cin >> e;
  //ListInsert_L(L, x, e);
  std::cout << "请输入您要删除元素的位置" << std::endl;
  std::cin >> x;
  ListDelete_L(L, x);
  PrintList(L);
  return true;
}
目录
相关文章
|
3天前
|
算法 索引
【数据结构与算法】5、循环链表、约瑟夫问题、静态链表
【数据结构与算法】5、循环链表、约瑟夫问题、静态链表
22 0
|
3天前
|
索引
数据结构界的幻神(First)----链表
数据结构界的幻神(First)----链表
|
1月前
|
存储 C++ Python
【数据结构】哈希表—C/C++实现
【数据结构】哈希表—C/C++实现
31 0
|
2天前
|
Python
Python实现数据结构(如:链表、栈、队列等)。
Python实现数据结构(如:链表、栈、队列等)。
17 0
|
3天前
|
算法 Java 索引
【数据结构与算法】4、双向链表(学习 jdk 的 LinkedList 部分源码)
【数据结构与算法】4、双向链表(学习 jdk 的 LinkedList 部分源码)
16 0
|
3天前
|
存储 算法
【数据结构与算法】3、虚拟头节点、动态数组的缩容、动态数组和单链表的复杂度、数组的随机访问
【数据结构与算法】3、虚拟头节点、动态数组的缩容、动态数组和单链表的复杂度、数组的随机访问
10 0
|
3天前
|
存储 算法 Java
【数据结构与算法】2、链表(简单模拟 Java 中的 LinkedList 集合,反转链表面试题)
【数据结构与算法】2、链表(简单模拟 Java 中的 LinkedList 集合,反转链表面试题)
22 0
|
6天前
|
C语言 C++
【c++】用c++实现带头双向循环链表
【c++】用c++实现带头双向循环链表
|
26天前
|
Java C++ Python
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-456 求链表各节点的平均值(C++解法)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-456 求链表各节点的平均值(C++解法)
23 0

相关产品

  • 云迁移中心