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

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

C語言數據結構 雙向鏈表的建立與基本操作

2020-05-23 13:49:03
字體:
來源:轉載
供稿:網友

C語言數據結構 雙向鏈表的建立與基本操作

雙向鏈表比單鏈表有更好的靈活性,其大部分操作與線性表相同。下面總結雙向鏈表與單鏈表之間的不同之處及我在實現過程中所遇到的問題。

1.雙向鏈表的建立

雙向鏈表在初始化時,要給首尾兩個節點分配內存空間。成功分配后,要將首節點的prior指針和尾節點的next指針指向NULL,這是十分關鍵的一步,因為這是之后用來判斷空表的條件。同時,當鏈表為空時,要將首節點的next指向尾節點,尾節點的prior指向首節點。

2.雙向鏈表的插入操作

由于定義雙向鏈表時指針域中多了一個prior指針,插入操作相應變得復雜,但基本操作也并不難理解。只需記住在處理前驅和后繼指針與插入節點的關系時,應始終把握好“有序原則”,即若將插入節點與兩個已存在的節點構成三角形,則應先處理“向上”的指針,再處理“向下”的指針。下面用代碼描述其過程:

pinsert->prior=p;pinsert->next=p->next;p->next->prior=pinsert;p->next=pinsert;  

3.雙向鏈表的刪除操作

理解了雙向鏈表的插入操作后,刪除操作便十分容易理解。下面用代碼描述其過程:

 p->prior->next=p->next;  p->next->prior=p->prior;  free(p);

雙向鏈表的其他操作與單鏈表類似,在此不再贅述,完整的代碼如下:

#include<stdio.h>#include<stdlib.h>#include<time.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int status;typedef int elemtype;typedef struct node{  elemtype data;  struct node * next;  struct node * prior;}node;typedef struct node* dlinklist;status visit(elemtype c){  printf("%d ",c);}/*雙向鏈表初始化*/status initdlinklist(dlinklist * head,dlinklist * tail){  (*head)=(dlinklist)malloc(sizeof(node));  (*tail)=(dlinklist)malloc(sizeof(node));  if(!(*head)||!(*tail))    return ERROR;  /*這一步很關鍵*/   (*head)->prior=NULL;  (*tail)->next=NULL;  /*鏈表為空時讓頭指向尾*/  (*head)->next=(*tail);  (*tail)->prior=(*head);}/*判定是否為空*/status emptylinklist(dlinklist head,dlinklist tail){  if(head->next==tail)    return TRUE;  else    return FALSE;} /*尾插法創建鏈表*/ status createdlinklisttail(dlinklist head,dlinklist tail,elemtype data){  dlinklist pmove=tail,pinsert;  pinsert=(dlinklist)malloc(sizeof(node));  if(!pinsert)     return ERROR;  pinsert->data=data;  pinsert->next=NULL;  pinsert->prior=NULL;  tail->prior->next=pinsert;  pinsert->prior=tail->prior;  pinsert->next=tail;  tail->prior=pinsert;} /*頭插法創建鏈表*/ status createdlinklisthead(dlinklist head,dlinklist tail,elemtype data){  dlinklist pmove=head,qmove=tail,pinsert;  pinsert=(dlinklist)malloc(sizeof(node));  if(!pinsert)    return ERROR;  else{    pinsert->data=data;    pinsert->prior=pmove;    pinsert->next=pmove->next;    pmove->next->prior=pinsert;    pmove->next=pinsert;  }}/*正序打印鏈表*/ status traverselist(dlinklist head,dlinklist tail){  /*dlinklist pmove=head->next;  while(pmove!=tail){    printf("%d ",pmove->data);    pmove=pmove->next;  }  printf("/n");  return OK;*/  dlinklist pmove=head->next;  while(pmove!=tail){    visit(pmove->data);    pmove=pmove->next;  }  printf("/n");}/*返回第一個值為data的元素的位序*/status locateelem(dlinklist head,dlinklist tail,elemtype data){  dlinklist pmove=head->next;  int pos=1;  while(pmove&&pmove->data!=data){    pmove=pmove->next;    pos++;  }  return pos;}/*返回表長*/status listlength(dlinklist head,dlinklist tail){  dlinklist pmove=head->next;  int length=0;  while(pmove!=tail){    pmove=pmove->next;    length++;  }  return length;}/*逆序打印鏈表*/status inverse(dlinklist head,dlinklist tail){  dlinklist pmove=tail->prior;  while(pmove!=head){    visit(pmove->data);    pmove=pmove->prior;  }  printf("/n");}/*刪除鏈表中第pos個位置的元素,并用data返回*/status deleteelem(dlinklist head,dlinklist tail,int pos,elemtype *data){  int i=1;  dlinklist pmove=head->next;  while(pmove&&i<pos){    pmove=pmove->next;    i++;  }  if(!pmove||i>pos){    printf("輸入數據非法/n");    return ERROR;  }  else{    *data=pmove->data;    pmove->next->prior=pmove->prior;    pmove->prior->next=pmove->next;    free(pmove);  }}/*在鏈表尾插入元素*/status inserttail(dlinklist head,dlinklist tail,elemtype data){  dlinklist pinsert;  pinsert=(dlinklist)malloc(sizeof(node));  pinsert->data=data;  pinsert->next=NULL;  pinsert->prior=NULL;  tail->prior->next=pinsert;  pinsert->prior=tail->prior;  pinsert->next=tail;  tail->prior=pinsert;  return OK;} int main(void){  dlinklist head,tail;  int i=0;  elemtype data=0;  initdlinklist(&head,&tail);  if(emptylinklist(head,tail))    printf("鏈表為空/n");  else    printf("鏈表不為空/n");  printf("頭插法創建鏈表/n");   for(i=0;i<10;i++){    createdlinklisthead(head,tail,i);  }  traverselist(head,tail);  for(i=0;i<10;i++){    printf("表中值為%d的元素的位置為",i);     printf("%d位/n",locateelem(head,tail,i));  }  printf("表長為%d/n",listlength(head,tail));  printf("逆序打印鏈表");  inverse(head,tail);  for(i=0;i<10;i++){    deleteelem(head,tail,1,&data);    printf("被刪除的元素為%d/n",data);  }  traverselist(head,tail);  if(emptylinklist(head,tail))    printf("鏈表為空/n");  else    printf("鏈表不為空/n");    printf("尾插法創建鏈表/n");  for(i=0;i<10;i++){    //inserttail(head,tail,i);    createdlinklisttail(head,tail,i);  }  traverselist(head,tail);  printf("逆序打印鏈表");  inverse(head,tail);}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
高清欧美性猛交xxxx黑人猛交| 亚洲字幕一区二区| 久久久久久亚洲精品不卡| 久久影院免费观看| 久久久天堂国产精品女人| 91人成网站www| 日韩成人小视频| 在线观看亚洲视频| 亚洲欧美日本另类| 国产在线播放不卡| 欧美片一区二区三区| 国产一区二区免费| 在线精品国产欧美| 国产精品久久久久久久7电影| 青青久久av北条麻妃黑人| 超薄丝袜一区二区| 精品日韩中文字幕| 欧美电影第一页| 日韩在线视频一区| 欧美黑人xxx| 麻豆一区二区在线观看| 亚洲裸体xxxx| 91啪国产在线| 欧美亚洲伦理www| 国产不卡在线观看| 亚洲国产精品小视频| 国产一区二区在线免费| 国产+成+人+亚洲欧洲| 这里只有精品在线观看| 国内揄拍国内精品| 精品二区三区线观看| 欧美极度另类性三渗透| 国产精品久久久久久亚洲调教| 国产精品香蕉av| 日韩精品999| 久久久这里只有精品视频| 国产成人综合亚洲| 欧美另类69精品久久久久9999| 国语自产精品视频在线看抢先版图片| 成人黄色短视频在线观看| 亚洲性无码av在线| 日韩精品极品在线观看播放免费视频| 久久中文精品视频| 欧美亚洲国产另类| 国产成人精品在线视频| 亚洲区一区二区| 欧美一乱一性一交一视频| 亚洲国产中文字幕在线观看| 国产美女精品视频免费观看| 性色av一区二区咪爱| 91精品国产91久久久久久不卡| 久久久久国产精品免费网站| 97热精品视频官网| 亚洲国产成人91精品| 精品高清美女精品国产区| 日韩欧美aⅴ综合网站发布| 国产日韩一区在线| 91亚洲va在线va天堂va国| 国产91精品高潮白浆喷水| 国内精久久久久久久久久人| 亚洲国产精品久久精品怡红院| 日韩精品视频在线免费观看| 久久久免费观看视频| 岛国av在线不卡| 成人av.网址在线网站| 日韩av色综合| 国产精品第3页| 国产精品人人做人人爽| 欧美精品aaa| 欧美丝袜一区二区三区| 成人伊人精品色xxxx视频| 日本高清视频精品| 亚洲精品乱码久久久久久按摩观| 国产精品999999| 久久人人爽亚洲精品天堂| 国产成人精品视频在线观看| 日本午夜精品理论片a级appf发布| 亚洲free性xxxx护士hd| 成人久久久久久| 日韩中文字幕免费看| xxxxx91麻豆| 欧美精品情趣视频| 国产69精品久久久| 亚洲国产精品热久久| 国产国语videosex另类| 亚洲精品456在线播放狼人| 国产日韩av在线| 亚洲欧美精品在线| 日韩欧美成人网| 国产精品精品一区二区三区午夜版| 91精品视频在线看| 懂色av影视一区二区三区| 九九热99久久久国产盗摄| www.99久久热国产日韩欧美.com| 欧美成人黄色小视频| 成人欧美在线视频| 欧美精品在线播放| 久久视频在线视频| 亚洲国产精品女人久久久| 久久视频在线播放| 成人黄色在线观看| 97视频免费看| 久久综合伊人77777尤物| 少妇av一区二区三区| 91a在线视频| 色悠悠国产精品| 国产精品极品在线| 欧美午夜久久久| 久久国产加勒比精品无码| 国产高清视频一区三区| 日韩综合中文字幕| 午夜免费日韩视频| 亚洲精品suv精品一区二区| 亚洲国产精品久久91精品| 国产成人精品视频在线| 国产午夜一区二区| 国产精品成久久久久三级| 亚洲精品日韩激情在线电影| 国产偷国产偷亚洲清高网站| 亚洲欧洲国产精品| 国产精品久久久久影院日本| 欧美性视频在线| 乱亲女秽乱长久久久| 高清欧美性猛交| 久久影院资源网| 成人免费视频xnxx.com| 国产成人精品综合| 国产一区二区三区网站| 欧美大片va欧美在线播放| 成人激情黄色网| 欧美成人在线免费| 亚洲精品成人久久久| 亚洲午夜av电影| 久久久噜噜噜久久久| 欧美日韩国产页| 精品国产精品三级精品av网址| 欧美亚洲一区在线| 欧美中文字幕在线播放| 亚洲女人天堂色在线7777| 88xx成人精品| 亚洲成人在线网| 国产视频福利一区| 国产欧美精品xxxx另类| 亚洲欧美激情视频| 成人久久一区二区| 亚洲精品久久久久久久久久久久久| 视频在线观看99| 国产精品91久久久久久| 日韩在线观看视频免费| 国产精品一区二区三区在线播放| 欧美日韩一区二区免费视频| 欧美性猛交xxxx富婆弯腰| 日韩美女视频在线观看| 亚洲欧美激情一区| 91精品在线一区| 亚洲www永久成人夜色| 国产精品日韩欧美大师| 国产精品流白浆视频| 日韩在线观看视频免费| 国产女人精品视频| 久久亚洲精品国产亚洲老地址| 亚洲一区中文字幕在线观看| 九九九久久国产免费| 欧美黑人视频一区|