亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++ 單鏈表的基本操作(詳解)

2020-05-23 13:57:45
字體:
來源:轉載
供稿:網友

鏈表一直是面試的高頻題,今天先總結一下單鏈表的使用,下節再總結雙向鏈表的。本文主要有單鏈表的創建、插入、刪除節點等。

1、概念

單鏈表是一種鏈式存取的數據結構,用一組地址任意存儲單元存放線性表中的數據元素。

鏈表中的數據是以結點來表示的,每個結點的構成:元素 + 指針,元素就是存儲數據的存儲單元,指針就是連接每個結點的地址數據。如下圖:

C++,單鏈表操作

2、鏈表的基本操作

SingleList.cpp:

#include "stdafx.h"#include "SingleList.h"#include <cstdlib>#include <iostream>#include <string.h>#include <conio.h>#include <stdio.h>/*c++實現簡單的單鏈表操作*/using namespace std;SingleList::SingleList(){  int num;  char name[128];  // 創建鏈表  node *stuList = CreatNode();  PrintList(stuList);  // 插入節點  printf("/n請輸入要插入的學生學號和姓名,輸入0 0表示結束.");  scanf_s("%d%s", &num, name, 100);  stuList = InsertNode(stuList, num, name);  PrintList(stuList);  // 刪除節點  printf("/n請輸入要刪除的學生學號:");  scanf_s("%d", &num, 100);  stuList = DeleteNode(stuList, num);  PrintList(stuList);  // 逆序  printf("/n逆序后的鏈表為:/n");  stuList = ReverseList(stuList);  PrintList(stuList);  system("PAUSE");}SingleList::~SingleList(){}//建立單鏈表 node *SingleList::CreatNode(){  node *head, *p, *s;  int num = 0;  char name[128];  int cycle = 1;  head = (node *)malloc(sizeof(node));  // 為頭結點分配內存空間  head->next = nullptr;  p = head;    // p指向頭節點  while (cycle)  {    printf("/n請輸入學生的學號和姓名:");    scanf_s("%d%s", &num, name, 100);    if (num != 0)    {      s = (node *)malloc(sizeof(node));      s->num = num;      memcpy(s->name, name, 128);      printf("%d%s", s->num, s->name);      p->next = s;    // 指向新插入的節點      p = s;    // p指向當前節點    }    else    {      cycle = 0;    }  }  head = head->next;  p->next = NULL;  printf("頭節點學生信息為: %d%s/n", head->num, head->name);  return head;}//單鏈表插入node *SingleList::InsertNode(node *head, int num, char* name){  node *s, *p1, *p2 = NULL;  p1 = head;  s = (node *)malloc(sizeof(node));  s->num = num;  strcpy_s(s->name, name);  while ((s->num > p1->num) && p1->next != NULL)  {    p2 = p1;    p1 = p1->next;  }  if (s->num <= p1->num)  {    if (head == p1)    {      // 插入首節點      s->next = p1;      head = s;    }    else    {      // 插入中間節點      p2->next = s;      s->next = p1;    }  }  else  {    // 插入尾節點    p1->next = s;    s->next = NULL;  }  return head;}// 計算單鏈表長度int SingleList::GetLength(node *head){  int length = 0;  node *p;  p = head;  while (p != NULL)  {    p = p->next;    length++;  }  return length;}//單鏈表刪除某個元素 node *SingleList::DeleteNode(node *head, int num){  node *p1, *p2 = nullptr;  p1 = head;  while (num != p1->num && p1->next != NULL)  {    p2 = p1;    p1 = p1->next;  }  if (num == p1->num)  {    if (p1 == head)    {      head = p1->next;    }    else    {      p2->next = p1->next;    }    free(p1);  }  else  {    printf("找不到學號為%d 的學生!/n", num);  }  return head;}//單鏈表逆序node *SingleList::ReverseList(node *head){  // A->B->C->D  node *old_head;    // 原來鏈表的頭  node *new_head;    // 新鏈表的頭  node *cur_head;    // 獲得原來鏈表的頭  if (head == NULL || head->next == NULL)    return head;  new_head = head;        // A  cur_head = head->next;    // B  while (cur_head)  {    old_head = cur_head->next;    // 將原來鏈表的頭取出,并將第二個節點作為頭節點    cur_head->next = new_head;  // 將取出的頭設為新鏈表的頭    new_head = cur_head;        // 新鏈表的頭就是目前新鏈表的頭    cur_head = old_head;          // 接著處理  }  head->next = NULL;  head = new_head;  return head;}//打印單鏈表void SingleList::PrintList(node *head){  node *p;  int n;  n = GetLength(head);  printf("/n打印出 %d 個學生的信息:/n", n);  p = head;  while (p != NULL)  {    printf("學號: %d ,姓名: %s/n", p->num, p->name);    p = p->next;  }}

SingleList.h:

#pragma oncetypedef struct student{  int num;        // 學號  char name[128]; // 姓名  struct student *next;}node;class SingleList{public:  SingleList();  ~SingleList();  //建立單鏈表   node *CreatNode();  //單鏈表插入  node *InsertNode(node *head, int num, char* name);  // 計算單鏈表長度  int GetLength(node *head);  //單鏈表刪除某個元素   node *DeleteNode(node *head, int num);  //單鏈表逆序  node *ReverseList(node *head);  //打印單鏈表  void PrintList(node *head);};

關于逆序邏輯,研究了一下:

1、主要思路:

假設有單鏈表A->B->C->D,首先取出首節點A作為新逆序出來的鏈表

這樣,原鏈表就為:B->C->D,逆序后的新鏈表為:A

2. 按照上述方法,依次取出B、C、D放入新鏈表

2、圖形表示:

  原始的單鏈表:

  C++,單鏈表操作
<!--[endif]-->

初始狀態時,單鏈表如上圖所示,head指向頭節點A。

1. 取出原始鏈表的第一個節點A,然后將該節點作為新鏈表的頭節點

原始鏈表:

  C++,單鏈表操作
<!--[endif]-->

  新鏈表:

<!--[if !vml]-->  C++,單鏈表操作<!--[endif]-->

<!--[if !supportLists]--> 2.然后同上處理:

 原始鏈表:

<!--[if !vml]--> C++,單鏈表操作<!--[endif]-->

  新鏈表:

<!--[if !vml]--> C++,單鏈表操作<!--[endif]-->

以上這篇C++ 單鏈表的基本操作(詳解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲女人初尝黑人巨大| 亚洲欧美日韩中文在线制服| 精品久久久av| 国产精品美乳在线观看| 最新的欧美黄色| 亚洲视频在线观看视频| 欧美日韩免费在线| 色yeye香蕉凹凸一区二区av| 亚洲国产成人91精品| 欧美一区二区三区图| 精品欧美国产一区二区三区| 日韩在线免费av| 97超视频免费观看| 一本色道久久综合狠狠躁篇的优点| 久久影院资源站| 91久久久久久久久久久| 中文字幕日韩欧美在线视频| 都市激情亚洲色图| 国产亚洲欧美视频| 亚洲精品资源美女情侣酒店| 国产香蕉精品视频一区二区三区| 欧美俄罗斯乱妇| 亚洲色图美腿丝袜| 精品国产乱码久久久久久虫虫漫画| 92裸体在线视频网站| 久久久久中文字幕| 欧美成人激情在线| 91久久精品在线| 亚洲国产精品va在线观看黑人| 国产精国产精品| 美日韩精品视频免费看| 欧美巨大黑人极品精男| 两个人的视频www国产精品| 欧美日韩成人黄色| 在线观看视频亚洲| 视频直播国产精品| 久久久久久亚洲| 少妇久久久久久| 亚洲精品一区二区三区婷婷月| 91色琪琪电影亚洲精品久久| 中文字幕精品在线| 成人欧美一区二区三区黑人| 欧美一区二三区| 国产欧美精品久久久| xvideos亚洲| 久久久久久网址| 日韩中文av在线| 中文字幕日韩综合av| 国产日韩欧美另类| 成人a在线观看| 精品久久久久国产| 日韩欧美国产免费播放| 国产91热爆ts人妖在线| 日韩国产一区三区| 91久久精品一区| 欧美激情视频网| 蜜臀久久99精品久久久久久宅男| 成人福利免费观看| 国产性猛交xxxx免费看久久| 欧美激情一区二区久久久| 日本欧美黄网站| 国产精品亚洲精品| 欧美性猛交99久久久久99按摩| 久久综合久中文字幕青草| 国产区精品在线观看| 亚洲欧洲激情在线| 中文字幕精品久久| 黑人巨大精品欧美一区二区免费| 亚洲精品日韩欧美| 国产精品白丝av嫩草影院| 亚洲精品免费网站| 中文字幕免费国产精品| 国产精品国产福利国产秒拍| 国产在线视频91| 日韩有码在线播放| 97在线免费观看| 国产精品免费一区| 日韩禁在线播放| 欧美理论片在线观看| 亚洲一区二区三区四区视频| 亚洲精品av在线| 欧美综合在线第二页| 亚洲色图18p| 九九热这里只有精品免费看| 国产视频精品xxxx| 久久综合伊人77777尤物| 欧美激情a∨在线视频播放| 国产精品久久久91| 国产精品日韩久久久久| 亚洲午夜色婷婷在线| 亚洲福利精品在线| 国产成人av网| 国产精品成人品| 国产精品久久久久久久久久99| 国产91在线高潮白浆在线观看| 久久久这里只有精品视频| 亚洲欧洲在线视频| 国产精品亚洲激情| 日韩一区二区欧美| 欧美日韩亚洲精品一区二区三区| 国产精品男人爽免费视频1| 91在线色戒在线| 成人网在线视频| 亚洲欧美中文日韩在线| 欧美精品在线免费| 美女视频黄免费的亚洲男人天堂| 日韩精品中文在线观看| 九九久久久久久久久激情| 欧美高跟鞋交xxxxxhd| 久久久久久久爱| 亚洲老头同性xxxxx| 97超级碰碰碰久久久| 国产精品久久久久久久一区探花| 日本成人激情视频| 国产精品日韩在线一区| 日韩中文字幕在线视频播放| 亚洲精品720p| 欧美精品中文字幕一区| 欧美电影免费观看电视剧大全| 午夜精品一区二区三区在线视| 欧美日本在线视频中文字字幕| 亚洲性生活视频| 成人欧美一区二区三区黑人| 亚洲美女av电影| 久久人人爽人人爽爽久久| 亚洲成色777777在线观看影院| 亚洲欧美精品suv| 久久精品视频播放| 亚洲经典中文字幕| 亚洲国产精品久久91精品| 久久久久久久久久久免费| 91av视频导航| 国产97人人超碰caoprom| 国产精品久久久久久久久久小说| 美日韩精品免费观看视频| 永久555www成人免费| 91精品国产91久久久久久不卡| 最近2019年手机中文字幕| 亚洲人成电影网站| 国产精品自产拍在线观看| 久久久国产91| 日韩在线观看视频免费| 日韩精品视频在线免费观看| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲一区国产精品| 久久久久久网址| 亚洲色图偷窥自拍| 在线日韩精品视频| 国产精品成人免费电影| 国产免费观看久久黄| 欧美日本国产在线| 91在线无精精品一区二区| 97视频在线观看免费高清完整版在线观看| 日韩在线视频中文字幕| 欧美激情xxxx| 精品国产乱码久久久久久天美| 尤物yw午夜国产精品视频明星| 亚洲偷欧美偷国内偷| 97精品国产97久久久久久免费| 日本精品久久中文字幕佐佐木| 国产精品麻豆va在线播放| 久久综合免费视频影院| 国产精品久久久久77777| 欧美激情一区二区三区成人|