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

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

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

2020-01-26 14:21:45
字體:
來源:轉載
供稿:網友

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

1、概念

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

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

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、圖形表示:

  原始的單鏈表:

  
<!--[endif]-->

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

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

原始鏈表:

  
<!--[endif]-->

  新鏈表:

<!--[if !vml]-->  <!--[endif]-->

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

 原始鏈表:

<!--[if !vml]--> <!--[endif]-->

  新鏈表:

<!--[if !vml]--> <!--[endif]-->

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
免费91麻豆精品国产自产在线观看| 亚洲第一视频网站| 久久久久久久久久久成人| 亚洲天堂免费视频| 成人动漫网站在线观看| 国产亚洲视频在线| 中文字幕精品av| 欧美激情久久久久久| 欧美成年人在线观看| 成人美女av在线直播| 一本大道香蕉久在线播放29| 亚洲最大成人在线| 亚洲欧美国产va在线影院| 国产午夜精品一区理论片飘花| 国内精品一区二区三区| 色青青草原桃花久久综合| 色偷偷888欧美精品久久久| 精品视频在线播放免| 欧美在线中文字幕| 国产亚洲欧洲黄色| 亚洲午夜未满十八勿入免费观看全集| 欧美性一区二区三区| 欧美在线播放视频| 久久久av网站| 久久精品视频在线播放| 欧美激情在线狂野欧美精品| 欧美激情videos| 98精品国产高清在线xxxx天堂| 亚洲最大的网站| 日韩激情片免费| 黄色91在线观看| 日韩成人久久久| 欧美午夜丰满在线18影院| 日韩免费在线看| 国产又爽又黄的激情精品视频| 久久免费视频网| 国产日韩换脸av一区在线观看| 国产亚洲视频在线观看| 国产成人一区二| 久久精品色欧美aⅴ一区二区| 免费av一区二区| 欧美高清videos高潮hd| 日韩免费看的电影电视剧大全| 中文字幕日本精品| 68精品久久久久久欧美| 亚洲男人天堂视频| 91久久久久久久久久久| www.日韩欧美| 欧美在线亚洲一区| 欧美在线视频一区| 热久久视久久精品18亚洲精品| 亚洲综合一区二区不卡| 欧美做受高潮1| 欧美激情第99页| 在线日韩欧美视频| 精品国产自在精品国产浪潮| 日韩精品在线观看一区| 2019国产精品自在线拍国产不卡| 亚洲国产一区二区三区四区| 日韩成人xxxx| 热99精品只有里视频精品| 国产精品女主播视频| 7m精品福利视频导航| 久久夜精品香蕉| 一区二区欧美久久| 91po在线观看91精品国产性色| 亚洲人a成www在线影院| 国产一区香蕉久久| 中文字幕日韩av电影| 中文字幕亚洲字幕| 精品亚洲国产成av人片传媒| 一区二区日韩精品| 久久噜噜噜精品国产亚洲综合| 俺也去精品视频在线观看| 欧美黑人xxxⅹ高潮交| 国产精品扒开腿做| 欧美性xxxxx| 91丨九色丨国产在线| 亚洲午夜未满十八勿入免费观看全集| 97在线观看免费高清| 国产精品久久色| 成人a视频在线观看| 亚洲美女免费精品视频在线观看| 久久精品国产亚洲精品| 中文字幕精品在线| 欧美日韩一区二区免费在线观看| 国产91色在线播放| 美女久久久久久久| 国产精品免费视频久久久| 色先锋久久影院av| 国产原创欧美精品| 韩国三级日本三级少妇99| 91精品国产电影| 久久精品国产96久久久香蕉| 亚洲色图欧美制服丝袜另类第一页| 国产精品影片在线观看| 亚洲影院污污.| 美日韩精品视频免费看| 毛片精品免费在线观看| 亚洲成人性视频| 欧美日韩中文在线| 91社区国产高清| 欧美丰满少妇xxxx| 九九九久久久久久| 久久久在线免费观看| 国产精品高精视频免费| 国产精品高潮呻吟久久av黑人| 久久影视电视剧免费网站清宫辞电视| 久久精品国产电影| 欧美成人网在线| 欧美激情a∨在线视频播放| 中文字幕日韩高清| 亚洲精品久久久久久久久久久久| 国产精品入口免费视| 久久九九亚洲综合| 亚洲在线观看视频网站| 欧美激情手机在线视频| 日本久久久a级免费| 日日狠狠久久偷偷四色综合免费| 草民午夜欧美限制a级福利片| 日本精品视频在线观看| 日本一区二三区好的精华液| 国产精品高潮呻吟久久av黑人| 欧美一区二三区| 国产日韩一区在线| 亚洲韩国欧洲国产日产av| 中文字幕亚洲国产| 成人亚洲激情网| 91在线中文字幕| 亚洲男人天堂2019| 日韩久久午夜影院| 亚洲精品少妇网址| 亚洲国产精品va在看黑人| 成人在线观看视频网站| 69av视频在线播放| 欧美日韩视频免费播放| 日韩欧美成人区| 欧美成人免费播放| 久久久亚洲精选| 日韩欧美精品在线观看| 国产一区二区三区在线观看视频| 亚洲国产精品电影| 亚洲欧美综合精品久久成人| 国产精品一区二区三区久久久| 久久精品欧美视频| 成人午夜黄色影院| 欧美精品日韩三级| 欧洲成人午夜免费大片| 69av成年福利视频| 日韩精品免费在线视频| 久久久亚洲天堂| 国产欧美久久一区二区| 中文字幕亚洲专区| 2019国产精品自在线拍国产不卡| 欧美色视频日本版| 2019亚洲男人天堂| 亚洲欧洲偷拍精品| 国产女人18毛片水18精品| 91国产中文字幕| 九九久久久久久久久激情| 午夜精品久久久久久久久久久久| 亚洲免费av网址| 欧美激情中文网| 国产精品欧美日韩久久|