程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話之雙向鏈表詳解及實例代碼

C說話之雙向鏈表詳解及實例代碼

編輯:關於C++

C說話之雙向鏈表詳解及實例代碼。本站提示廣大學習愛好者:(C說話之雙向鏈表詳解及實例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話之雙向鏈表詳解及實例代碼正文


1,雙向鏈表簡介。

雙向鏈表也叫雙鏈表,是鏈表的一種,它的每一個數據結點中都有兩個指針,分離指向直接後繼和直接先驅。所以,從雙向鏈表中的隨意率性一個結點開端,都可以很便利地拜訪它的先驅結點和後繼結點。普通我們都結構雙向輪回鏈表。

2,例子請求:

完成雙向鏈表的拔出、刪除和查找,將先生治理體系應用的數組,以雙向鏈表的方法完成,可以或許支撐無窮制的先生人數的增刪改查和保留。

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說話雙向鏈表的材料整頓,後續持續彌補相干材料,感謝年夜家對本站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved