欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言之雙向鏈表詳解及實(shí)例代碼

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

1,雙向鏈表簡(jiǎn)介。

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

2,例子要求:

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

3,代碼實(shí)現(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;


// 初始化一個(gè)學(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;
}


// 移除一個(gè)學(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);


}







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

相關(guān)文章

  • C語言中.與->的用法介紹

    C語言中.與->的用法介紹

    結(jié)構(gòu)體用點(diǎn),結(jié)構(gòu)體指針用箭頭,簡(jiǎn)單的說,就是一個(gè)快捷方式,一個(gè)語法糖,這篇文章主要介紹了C語言中.與->的區(qū)別及用法,需要的朋友可以參考下
    2023-05-05
  • C語言實(shí)現(xiàn)從指定位置截取文件內(nèi)容

    C語言實(shí)現(xiàn)從指定位置截取文件內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)從指定位置截取文件內(nèi)容,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • visual studio2019的安裝以及使用圖文步驟詳解

    visual studio2019的安裝以及使用圖文步驟詳解

    這篇文章主要介紹了visual studio2019的安裝以及使用圖文步驟詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C語言超詳細(xì)講解指針與結(jié)構(gòu)體

    C語言超詳細(xì)講解指針與結(jié)構(gòu)體

    指針提供了對(duì)地址操作的一種方法,因此,使用指針可使得C語言能夠更高效地實(shí)現(xiàn)對(duì)計(jì)算機(jī)底層硬件的操作。另外,通過指針可以更便捷地操作數(shù)組。C數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是C編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許您存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng)
    2022-05-05
  • C++實(shí)現(xiàn)簡(jiǎn)單的HTTP服務(wù)器

    C++實(shí)現(xiàn)簡(jiǎn)單的HTTP服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)單的HTTP服務(wù)器的相關(guān)資料,感興趣的朋友可以參考下
    2016-05-05
  • C++快速排序算法簡(jiǎn)明理解

    C++快速排序算法簡(jiǎn)明理解

    快速排序由于排序效率在同為O(N*logN)的幾種排序方法中效率較高,因此經(jīng)常被采用,再加上快速排序思想----分治法也確實(shí)實(shí)用,因此很多軟件公司的筆試面試,包括像騰訊,微軟等知名IT公司都喜歡考這個(gè),還有大大小的程序方面的考試如軟考,考研中也常常出現(xiàn)快速排序的身影
    2022-05-05
  • 在vs2017上配置AppGameKit庫(kù)的圖文教程

    在vs2017上配置AppGameKit庫(kù)的圖文教程

    這篇文章主要介紹了在vs2017上配置AppGameKit庫(kù)的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • C語言指針和數(shù)組深入探究使用方法

    C語言指針和數(shù)組深入探究使用方法

    在C語言和C++等語言中,數(shù)組元素全為指針變量的數(shù)組稱為指針數(shù)組,指針數(shù)組中的元素都必須具有相同的存儲(chǔ)類型、指向相同數(shù)據(jù)類型的指針變量。指針數(shù)組比較適合用來指向若干個(gè)字符串,使字符串處理更加方便、靈活
    2022-08-08
  • C語言實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)

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

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語言實(shí)現(xiàn)時(shí)間處理工具的示例代碼

    C語言實(shí)現(xiàn)時(shí)間處理工具的示例代碼

    這篇文章主要為大家詳細(xì)介紹了利用C語言實(shí)現(xiàn)時(shí)間處理工具的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-09-09

最新評(píng)論