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

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

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

1,雙向鏈表簡介。

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

2,例子要求:

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

3,代碼實現。

#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;     //指向前驅結點
  struct Node *next;     //指向后繼結點
}Node, *DLinkList;


// 初始化一個學生鏈表
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;
}


//添加學生信息
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;
}


// 查找學生信息
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;
}


// 移除一個學生
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 初始化學生雙向鏈表數據
  insertDouLinkListStuent(L,1,name2,99,phone2);
  printfInfo(L);


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


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


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


}







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

相關文章

  • 基于C語言實現學生管理系統(tǒng)

    基于C語言實現學生管理系統(tǒng)

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

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

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

    C語言超詳細講解遞歸算法漢諾塔

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

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

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

    C語言中關于樹和二叉樹的相關概念

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

    C語言結構體定義的方法匯總

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

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

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

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

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

    C++ stack與queue模擬實現詳解

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

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

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

最新評論

贡嘎县| 阜康市| 漳浦县| 泗水县| 中宁县| 乐安县| 留坝县| 井陉县| 岱山县| 郧西县| 正安县| 合肥市| 保德县| 那坡县| 华容县| 宁津县| 桂林市| 桃园市| 呼和浩特市| 利辛县| 卢湾区| 桐柏县| 三门峡市| 扶沟县| 恩施市| 海宁市| 建瓯市| 丹阳市| 栾川县| 泰和县| 天峨县| 德格县| 晴隆县| 汉源县| 万年县| 锦屏县| 刚察县| 始兴县| 乌兰察布市| 蒙阴县| 武山县|