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

首頁 > 編程 > C > 正文

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

2020-01-26 14:13: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
久久久久久久999精品视频| 国产精品免费久久久久久| 久久精品影视伊人网| 精品国产31久久久久久| 亚洲免费视频一区二区| 国产精品激情av在线播放| 992tv成人免费影院| 奇米成人av国产一区二区三区| 成人黄色生活片| 在线视频精品一| 成人h视频在线观看播放| 高清一区二区三区四区五区| 国产噜噜噜噜噜久久久久久久久| 成人女保姆的销魂服务| 日韩色av导航| 在线日韩中文字幕| 久久在线免费观看视频| 亚洲色图美腿丝袜| 中文欧美日本在线资源| 欧美一级大片在线观看| 亚洲欧美成人精品| 国产91成人video| 中文字幕亚洲精品| 日本精品视频在线播放| 久久综合伊人77777| 色先锋资源久久综合5566| 国产精品电影网站| 国产在线一区二区三区| 亚洲男人的天堂在线播放| 久热精品视频在线| 91在线免费网站| 欧美视频中文在线看| 2024亚洲男人天堂| 中文字幕亚洲色图| 欧美精品做受xxx性少妇| 国产精品v日韩精品| 亚洲欧美国产高清va在线播| 久久韩国免费视频| 亚洲国产精品久久久久久| 国产成人精品一区二区在线| 久久久精品欧美| 亚洲天堂一区二区三区| 久久青草福利网站| 久久99亚洲热视| 亚洲国产成人在线播放| 久久亚洲欧美日韩精品专区| 亚洲欧美中文日韩v在线观看| 亚洲欧美激情一区| 亚洲春色另类小说| 青青久久av北条麻妃黑人| 国产成一区二区| 国产精品女人网站| 日产精品久久久一区二区福利| 亚洲一品av免费观看| 亚洲香蕉成人av网站在线观看| 国产午夜精品全部视频播放| 亚洲欧美日韩爽爽影院| 蜜臀久久99精品久久久久久宅男| 亚洲激情在线观看| 日韩欧美中文字幕在线观看| 懂色av中文一区二区三区天美| 亚洲精品午夜精品| 亚洲精品久久久久中文字幕二区| 国产精品一区二区三区在线播放| 日韩电影视频免费| 久久久久久亚洲精品中文字幕| 欧美激情视频在线免费观看 欧美视频免费一| 自拍偷拍亚洲一区| 亚洲欧美在线播放| 日韩高清av在线| 成人伊人精品色xxxx视频| 亚洲综合大片69999| 精品亚洲aⅴ在线观看| 中文字幕亚洲综合久久筱田步美| 91九色视频在线| 亚洲大胆美女视频| 国产mv免费观看入口亚洲| 欧美精品福利在线| 国产成人高潮免费观看精品| 欧美视频在线看| 亚洲精品网站在线播放gif| 亚洲老头同性xxxxx| 国产精品va在线播放我和闺蜜| 亚洲欧美激情四射在线日| 国内精品久久久久| 成人免费xxxxx在线观看| 午夜精品一区二区三区在线视| 68精品久久久久久欧美| 国产在线一区二区三区| 国产69精品久久久久9999| 久久国产精品久久国产精品| 亚洲一区二区三区四区在线播放| 欧美性做爰毛片| 黄色成人av网| 日韩电影免费在线观看中文字幕| 亚洲女同精品视频| 欧美日韩国产精品专区| 日韩中文字幕在线免费观看| 欧美怡春院一区二区三区| 精品久久久国产| 欧美有码在线视频| 自拍偷拍亚洲在线| 欧美国产日韩一区| 亚洲精品欧美日韩专区| 一区二区三区亚洲| 国产精品草莓在线免费观看| 国产精品视频一区二区高潮| 亚洲成人久久一区| 亚洲韩国日本中文字幕| 午夜精品一区二区三区av| 国产福利成人在线| 日韩久久午夜影院| 欧美成人黄色小视频| 国产精品免费久久久| 欧美成人午夜剧场免费观看| 亚洲精品中文字| 久久免费精品日本久久中文字幕| 中文在线资源观看视频网站免费不卡| 性色av一区二区咪爱| 日韩av免费看网站| 2024亚洲男人天堂| 国产精品2018| 精品美女久久久久久免费| 国产精品午夜视频| 亚洲免费福利视频| 亚洲精品综合久久中文字幕| 国产一区二区三区欧美| 日韩电视剧在线观看免费网站| 中文精品99久久国产香蕉| 超碰91人人草人人干| 国产精品中文字幕在线观看| 亚洲自拍欧美色图| 中文国产成人精品久久一| 日韩精品在线视频| 91嫩草在线视频| 一区二区三区动漫| 成人在线视频福利| 91精品中文在线| 久久国产视频网站| 久久久久久网址| 中文字幕自拍vr一区二区三区| 欧美日韩亚洲精品内裤| 国产免费一区视频观看免费| 亚洲福利视频久久| 91精品国产综合久久久久久久久| 色在人av网站天堂精品| 韩剧1988免费观看全集| 欧美成人午夜视频| 91久久国产综合久久91精品网站| 777精品视频| 一本一本久久a久久精品综合小说| 欧美中文字幕精品| 国产久一一精品| 亚洲欧美日韩国产中文专区| 色老头一区二区三区在线观看| 日韩成人中文字幕在线观看| 亚洲第一精品夜夜躁人人爽| 欧美日韩国产成人在线| 日韩成人在线观看| 久久久久中文字幕2018| 午夜欧美大片免费观看| 欧美专区日韩视频| 日本免费久久高清视频| 91精品国产91久久久|