最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言之雙向鏈表詳解及實例代碼

 更新時間:2016年09月19日 17:28:34   作者:黃杉  
這篇文章主要介紹了C語言之雙向鏈表的相關(guān)資料,并附實例代碼,有需要的小伙伴可以參考下

1,雙向鏈表簡介。

雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數(shù)據(jù)結(jié)點(diǎn)中都有兩個指針,分別指向直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個結(jié)點(diǎn)開始,都可以很方便地訪問它的前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn)。一般我們都構(gòu)造雙向循環(huán)鏈表。

2,例子要求:

完成雙向鏈表的插入、刪除以及查找,將學(xué)生管理系統(tǒng)使用的數(shù)組,以雙向鏈表的方式實現(xiàn),能夠支持無限制的學(xué)生人數(shù)的增刪改查以及保存。

3,代碼實現(xiàn)。

#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stdlib.h>


typedef struct Student{
  char name[20];
  int score;
  char phoneNum[14];
} str_student;


typedef struct Node{
  str_student data;
  struct Node *prior;     //指向前驅(qū)結(jié)點(diǎn)
  struct Node *next;     //指向后繼結(jié)點(diǎn)
}Node, *DLinkList;


// 初始化一個學(xué)生鏈表
DLinkList initDouLinkList()
{
  Node *L,*p,*r;
  char name[20];
  char phone[14];
  int score;
  L = (Node *)malloc(sizeof(Node));
  L->next = NULL;
  r = L;
  r->next = NULL;


  while(1)
  {
    p = (Node *)malloc(sizeof(Node));
    printf("input name is out exit,input student name:\n");
    scanf("%s",name);
    if (strcmp(name,"out")==0)
    {
      break;
    }
    strcpy(p->data.name, name);
    printf("input student score:");
    scanf("%d",&score);
    p->data.score = score;
    printf("input student phone:");
    scanf("%s",phone);
    strcpy(p->data.phoneNum, phone);


    p->next = r->next;
    r->next = p;
    r = p;


  }
  r->next = NULL;
  return L;
}


//添加學(xué)生信息
DLinkList insertDouLinkListStuent(DLinkList L,int i,char *name, int score,char *phonenum)
{
  DLinkList p,s;
  p = L->next;
  int tempi;
  for(tempi = 1;tempi < i-1; tempi++)
    p = p->next;
  s = (Node *)malloc(sizeof(Node));
  s->data.score = score;
  strcpy(s->data.name,name);
  strcpy(s->data.phoneNum,phonenum);
  s->next = p->next;
  p->next->prior = s;
  s->prior = p;
  p->next = s;


  return L;
}


// 查找學(xué)生信息
int findDouLinkListStudent(DLinkList L,char *name)
{
  DLinkList p;
  p = L->next;
  int i = 1;


  while(p != NULL && (strcmp(p->data.name, name)!=0))
  {
    ++i;
    p = p->next;
  }
  if(p == NULL)
    return 0;
  else return i;
}


// 移除一個學(xué)生
DLinkList removeDouLinkListStudent(DLinkList L,char *name)
{
  int tempi = 1;
  DLinkList p;
  p = L->next;
  int i =findDouLinkListStudent(L,name);
  while((tempi++) != i && p != NULL)
  {
    p = p->next;
  }
  if(p == NULL)
    printf("no list \n");
  else if(p->next == NULL)
  {
    p->prior->next = NULL;
    free(p);
  }
  else
  {
    p->prior->next = p->next;
    p->next->prior = p->prior;
    free(p);
  }
  return L;
}


// 鋪助打印信息
void printfInfo(DLinkList L)
{
  DLinkList p;
  p = L->next;
  while (p!=NULL)
  {
    printf("student name %s\n",p->data.name);
    printf("student name %d\n",p->data.score);
    printf("student name %s\n",p->data.phoneNum);
    p=p->next;
  }
}


void main ()
{
  char name2[20]="hanmeimei";
  char phone2[14]="13612345678";


  DLinkList L =initDouLinkList();
  // 2.1 初始化學(xué)生雙向鏈表數(shù)據(jù)
  insertDouLinkListStuent(L,1,name2,99,phone2);
  printfInfo(L);


  // 2.2 查找學(xué)生zhangsan
  findDouLinkListStudent(L,'zhangsan');
  printfInfo(L);


  // 2.3 刪除學(xué)生zhangsan
  removeDouLinkListStudent(L,'zhangsan');
  printfInfo(L);


  // 2.4 添加學(xué)生zengteng
  insertDouLinkListStuent(L,9,'zengteng',89,'13643345667');
  printfInfo(L);


}







以上就是對C語言雙向鏈表的資料整理,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對本站的支持!

相關(guān)文章

  • 基于C語言實現(xiàn)學(xué)生管理系統(tǒng)

    基于C語言實現(xiàn)學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于C語言實現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 如何區(qū)分C++中的inline和#define宏

    如何區(qū)分C++中的inline和#define宏

    這篇文章主要介紹了如何區(qū)分C++中的inline和#define宏,文中講解非常詳細(xì),代碼幫助大家更好的參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C語言超詳細(xì)講解遞歸算法漢諾塔

    C語言超詳細(xì)講解遞歸算法漢諾塔

    漢諾塔問題是一個經(jīng)典的問題。漢諾塔(Hanoi Tower),又稱河內(nèi)塔,源于印度一個古老傳說。本文將用Java求解這一問題,感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • C++ 中繼承與動態(tài)內(nèi)存分配的詳解

    C++ 中繼承與動態(tài)內(nèi)存分配的詳解

    這篇文章主要介紹了C++ 中繼承與動態(tài)內(nèi)存分配的詳解的相關(guān)資料,這里提供實例幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • C語言中關(guān)于樹和二叉樹的相關(guān)概念

    C語言中關(guān)于樹和二叉樹的相關(guān)概念

    這篇文章主要介紹了Java?數(shù)據(jù)結(jié)構(gòu)之樹和二叉樹相關(guān)資料,文中通過示例代碼和一些相關(guān)題目來做介紹,非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • C語言結(jié)構(gòu)體定義的方法匯總

    C語言結(jié)構(gòu)體定義的方法匯總

    結(jié)構(gòu)體是一種工具,用這個工具可以定義自己的數(shù)據(jù)類型。下面通過本文給大家分享了C語言結(jié)構(gòu)體定義的方法匯總,需要的朋友參考下吧
    2017-12-12
  • C++中實現(xiàn)線程安全和延遲執(zhí)行詳解

    C++中實現(xiàn)線程安全和延遲執(zhí)行詳解

    這篇文章主要為大家詳細(xì)介紹了C++中實現(xiàn)線程安全和延遲執(zhí)行的相關(guān)知識,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的小伙伴可以了解下
    2024-01-01
  • 淺析C語言中堆和棧的區(qū)別

    淺析C語言中堆和棧的區(qū)別

    堆和棧都是一種數(shù)據(jù)項按序排列的數(shù)據(jù)結(jié)構(gòu)。在C語言中是非常重要的知識點(diǎn),接下來通過本文給大家介紹C語言中堆和棧的區(qū)別,感興趣的朋友一起看下吧
    2016-06-06
  • C++ stack與queue模擬實現(xiàn)詳解

    C++ stack與queue模擬實現(xiàn)詳解

    這篇文章主要給大家介紹了關(guān)于c++stack與queue模擬實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Qt圖形圖像開發(fā)之高性能曲線圖模塊QCustomplot庫詳細(xì)使用方法與實例(支持動、靜曲線圖)

    Qt圖形圖像開發(fā)之高性能曲線圖模塊QCustomplot庫詳細(xì)使用方法與實例(支持動、靜曲線圖)

    這篇文章主要介紹了Qt圖形圖像開發(fā)之高性能曲線圖模塊QCustomplot庫詳細(xì)使用方法與實例(支持動、靜曲線圖),需要的朋友可以參考下
    2020-03-03

最新評論

泽库县| 南华县| 原平市| 安西县| 库尔勒市| 武平县| 东台市| 泾源县| 无极县| 莱州市| 昔阳县| 进贤县| 新晃| 江川县| 吉木萨尔县| 漳州市| 西吉县| 屯门区| 会理县| 子洲县| 广安市| 凤庆县| 永仁县| 阳东县| 宜都市| 福安市| 修水县| 诏安县| 白城市| 永平县| 定边县| 平阳县| 时尚| 长垣县| 淮北市| 桦川县| 长寿区| 中阳县| 尉氏县| 革吉县| 灵璧县|