数据结构链表操作的实现(超详细)

Posted 垚垚是小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构链表操作的实现(超详细)相关的知识,希望对你有一定的参考价值。

  #include<iostream>
  using namespace std;
  typedef struct Node {
	  int date;
	  struct Node* next;
  }Node;
  //初始化
  void ListInit(Node *ps) {
	  ps = (Node*)malloc(sizeof(Node));
	  ps->next = NULL;
	  if (ps == NULL) {
		  cout << "失败" << endl;
	  }
	  else
		  cout << "成功" << endl;
  }

  //创建链表
  void CreatList(Node *ps,int x) {
	  for (int i = 0; i < x; i++) {
		  Node* p;
		  p = (Node*)malloc(sizeof(Node));
            //创建一个指针  p  指向新建的Node
		  p->next = NULL;
		  cin >> p->date;
		  ps->next = p;
		  ps = p;//将p的地址给ps,ps指向p。
	  }
  }

  //遍历链表
  void PrintList(Node *ps) {
	 Node* p = ps->next;
	  while(p!=NULL) {
		  cout << p->date;
		  p = p->next;
	  }
	  cout << endl;
  }

  //头插法
  void insertPront(Node* ps, int data) {
	  Node* p = (Node*)malloc(sizeof(Node));
	  p->date = data;
	  p->next = ps->next;
	  ps->next = p;
 }


  //尾插法
  void insertBack(Node* head, int data) {
	  Node* newnode = (Node*)malloc(sizeof(Node));
	  newnode->next = NULL;
	  newnode->date = data;
	  Node* p = head;
	  while (p->next != NULL) {
		  p = p->next;
	  }
	  p->next = newnode;
	  p = newnode;
  }
  //删除链表
  void deleteLink(Node* head) {
	  Node* curr;
	  while (head->next != NULL) {
		  curr = head->next;
		  head->next = curr->next;
		  free(curr);
	  }
	  cout << "成功" << endl;
  }
  //判断链表是否为空
  void ListEmpty(Node* head) {
	  if (head->next == NULL) {
		  cout << "为空";
	  }
	  else cout << "不为空";
  }
  //查找
  Node* ListLocate(Node* L, int e) {
	  Node* p = L->next;
	  while (p != NULL && p->date != e)     //从第1个结点开始查找数据域为e的结点
		  p = p->next;
	  return p;
  }
  //链表的插入
  void LinkedListInsert(Node* L, int i, int x) {
	  int tempi = 0;
	  for (tempi = 1; tempi < i; tempi++) {
		 L = L->next;                 //查找第i个位置的前驱结点
	  }
	  Node* p;                                //插入的结点为p
	  p = (Node*)malloc(sizeof(Node));
	  p->date = x;
	  p->next = L->next;
	  L ->next = p;
  }
  //链表的插入
  void ListInsert(Node *ps,int pos,int x ) {
	  Node* l = (Node*)malloc(sizeof(Node));
	  l->next = NULL;
	  l->date = x;
	  for (int i = 1; i < x; i++) {
		  ps = ps->next;
	  }
	  l->next = ps->next;
	  ps->next = l;
  }


  int main() {
	  Node l;
	  ListInit(&l);//初始化链表
	  CreatList(&l, 3);//创建链表(给链表赋值)
	  PrintList(&l);//打印链表
	  insertPront(&l, 7);//前插法
	  insertBack(&l, 6);//尾插法
	  ListEmpty(&l);//判断是否为空
	  cout << endl;
	  ListInsert(&l, 3, 3);//在任意位置插入数字
	  PrintList(&l);
	  cout << ListLocate(&l, 1) << endl;
	  deleteLink(&l);//删除链表
  }

以上是关于数据结构链表操作的实现(超详细)的主要内容,如果未能解决你的问题,请参考以下文章

几分钟带你解决数据结构问题-------单链表(超详细)

数据结构与算法线性表的链式表示和实现,超详细C语言版

Java链表详解--通俗易懂(超详细,含源码)

信号量及其使用和实现(超详细)(z)

Java数据结构你必须要掌握的链表面试经典例题(附超详细图解和代码)

数据结构与算法之线性表(超详细顺序表链表)