雙向循環(huán)鏈表

一璧南、雙向循環(huán)鏈表的結點及數據定義

#define ERROR0

#define TRUE1

#define FALSE0

#define OK1

#define MAXSIZE20/* 存儲空間初始分配量 */

typedef int Status;/* Status是函數的類型,其值是函數結果狀態(tài)代碼掌逛,如OK等 */

typedef int ElemType;/* ElemType類型根據實際情況而定,這里假設為int */

//定義結點

typedef struct Node{

? ? structNode*prior;//前驅

? ? ElemTypedata;//數據


? ? structNode*next;//后續(xù)

}Node;

typedefstructNode* LinkList;

二、雙向循環(huán)鏈表初始化

Status CreateList(LinkList *L){

? ? *L = (LinkList)malloc(sizeof(Node));

? ? if(*L ==NULL) {

? ? ? ? returnERROR;

? ? }

? ? (*L)->next= (*L);

? ? (*L)->prior= (*L);

? ? (*L)->data= -1;

? ? //指向頭結點

? ? LinkListp = *L;

//? ? LinkList temp;

? ? for(inti=0; i<10; i++) {

? ? ? ? //新增數據

? ? ? ? LinkListtemp = (LinkList)malloc(sizeof(Node));

? ? ? ? if(temp ==NULL) {

? ? ? ? ? ? returnERROR;

? ? ? ? }

? ? ? ? temp->data= i;


? ? ? ? //為新增的結點建立雙向鏈表關系

? ? ? ? //temp 是p的后繼

? ? ? ? p->next= temp;

? ? ? ? //temp 的前驅是p

? ? ? ? temp ->prior= p;

? ? ? ? //

? ? ? ? temp->next= *L;

? ? ? ? //

? ? ? ? (*L)->prior= temp;

? ? ? ? //p 要記錄最后的結點的位置,方便下一次插入

? ? ? ? p = p->next;


? ? }

//? ? //最后一個結點的next指向頭結點,頭結點的prior指向最后一個結點

//? ? p->next = *L;

//? ? (*L)->prior = p;


? ? returnOK;

}

三、打印循環(huán)鏈表的元素


void display(LinkList L){

? ? if(L ==NULL) {

? ? ? ? printf("打印的雙向鏈表為空!\n");

? ? ? ? return;

? ? }

? ? LinkListp = L->next;

? ? while(p != L) {

? ? ? ? printf("%d ",p->data);

? ? ? ? p = p->next;

? ? }

? ? printf("\n");

}

四邀跃、雙向循環(huán)鏈表插入元素


/*當插入位置超過鏈表長度則插入到鏈表末尾*/

Status LinkListInsert(LinkList *L,int index,ElemType data){

? ? if(*L ==NULL|| index <1) {

? ? ? ? returnERROR;

? ? }

? ? //指向頭結點

? ? LinkListp = *L;

? ? //找到要插入的數據的前一個結點

? ? inti =1;

? ? while(inext!= *L) {

? ? ? ? p = p->next;

? ? ? ? i++;

? ? }


? ? if(i>index) {

? ? ? ? returnERROR;

? ? }

?? //

? ? LinkList temp = (LinkList)malloc(sizeof(Node));

? ? if(temp ==NULL) {

? ? ? ? returnERROR;

? ? }

? ? temp->data= data;

? ? //


? ? temp->next= p->next;

? ? //最后一個結點

? ? if(temp->next== *L) {

? ? ? ? (*L)->prior= temp;

? ? }else{

? ? ? ? p->next->prior= temp;

? ? }


? ? temp->prior= p;

? ? //

? ? p->next= temp;


//? ? p->next->prior = temp;

? ? returnOK;

}

五竿刁、雙向循環(huán)鏈表刪除結點

Status deleteList(LinkList *L,int index,ElemType *data){

? ? if(*L ==NULL|| index <1) {

? ? ? ? returnERROR;

? ? }


? ? LinkListtemp = (*L)->next;

? ? if(*L == temp) {


? ? ? ? returnERROR;

? ? }

? ? inti=1;

? ? while(inext!= *L)) {

? ? ? ? temp = temp->next;

//? ? ? ? NSLog(@"temp data = %d",temp->data);

? ? ? ? i++;

? ? }


? ? *data = temp->data;


? ? temp->prior->next= temp->next;

? ? temp->next->prior= temp->prior;


? ? free(temp);

? ? returnOK;

}

六息楔、查詢雙向鏈表的數據


ElemType SelectList(LinkList L,int index){

? ? if(L ==NULL|| index<1) {

? ? ? ? return-1;

? ? }


? ? LinkListp = L->next;

? ? inti=1;

? ? while(inext!= L) {

? ? ? ? p = p->next;

? ? ? ? i++;

? ? }

? ? if(p == L) {

? ? ? ? return-1;

? ? }

? ? returnp->data;

? ? return-1;

}

七、修改雙向鏈表的數據

Status ReplaceList(LinkList L,int index,ElemType data){

? ? if(L ==NULL|| index<1) {

? ? ? ? returnERROR;

? ? }

? ? LinkListp = L->next;

? ? inti=1;

? ? while(inext!=L) {

? ? ? ? p = p->next;

? ? ? ? i++;

? ? }

? ? if(p==L) {

? ? ? ? returnERROR;

? ? }

? ? p->data= data;

? ? returnOK;

}

八、調用

intmain(intargc,constchar* argv[]) {

? ? LinkList L;

? ? CreateList(&L);

? ? display(L);


? ? inttemp,item;

? ? printf("輸入要插入的位置和數據用空格隔開:");

? ? scanf("%d %d",&temp,&item);

? ? LinkListInsert(&L,temp,item);

? ? display(L);


? ? printf("輸入要刪除位置1:");

? ? scanf("%d",&temp);

? ? deleteList(&L, temp, &item);

? ? display(L);


? ? printf("輸入要刪除位置2:");

? ? scanf("%d",&temp);

? ? deleteList(&L, temp, &item);

? ? display(L);


? ? printf("輸入要刪除位置3:");

? ? scanf("%d",&temp);

? ? deleteList(&L, temp, &item);

? ? display(L);


? ? printf("輸入要查詢的位置1:");

? ? scanf("%d",&temp);

? ? ElemTypedata =SelectList(L, temp);

? ? printf("查詢到的數據是:%d\n",data);


? ? printf("輸入要查詢的位置2:");

? ? scanf("%d",&temp);

? ? data =SelectList(L, temp);

? ? printf("查詢到的數據是:%d\n",data);


? ? printf("輸入要查詢的位置3:");

? ? scanf("%d",&temp);

? ? data =SelectList(L, temp);

? ? printf("查詢到的數據是:%d\n",data);


? ? //

? ? printf("輸入要修改的位置和數據1:");

? ? scanf("%d %d",&temp,&item);


? ? ReplaceList(L,temp,item);

? ? display(L);


? ? printf("輸入要修改的位置和數據2:");

? ? scanf("%d %d",&temp,&item);


? ? ReplaceList(L,temp,item);

? ? display(L);


? ? printf("輸入要修改的位置和數據3:");

? ? scanf("%d %d",&temp,&item);


? ? ReplaceList(L,temp,item);

? ? display(L);

? ? return0;

}

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鸵鸥,隨后出現的幾起案子,更是在濱河造成了極大的恐慌丹皱,老刑警劉巖妒穴,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異摊崭,居然都是意外死亡讼油,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門呢簸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矮台,“玉大人乏屯,你說我怎么就攤上這事∈莺眨” “怎么了辰晕?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耸彪。 經常有香客問我伞芹,道長忘苛,這世上最難降的妖魔是什么蝉娜? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮扎唾,結果婚禮上召川,老公的妹妹穿的比我還像新娘。我一直安慰自己胸遇,他們只是感情好荧呐,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纸镊,像睡著了一般倍阐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逗威,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天峰搪,我揣著相機與錄音,去河邊找鬼凯旭。 笑死概耻,一個胖子當著我的面吹牛,可吹牛的內容都是我干的罐呼。 我是一名探鬼主播鞠柄,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嫉柴!你這毒婦竟也來了厌杜?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤计螺,失蹤者是張志新(化名)和其女友劉穎期奔,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體危尿,經...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡呐萌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了谊娇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肺孤。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡罗晕,死狀恐怖,靈堂內的尸體忽然破棺而出赠堵,到底是詐尸還是另有隱情小渊,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布茫叭,位于F島的核電站酬屉,受9級特大地震影響,放射性物質發(fā)生泄漏揍愁。R本人自食惡果不足惜呐萨,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望莽囤。 院中可真熱鬧谬擦,春花似錦、人聲如沸朽缎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽话肖。三九已至北秽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間最筒,已是汗流浹背贺氓。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留是钥,地道東北人掠归。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像悄泥,于是被迫代替她去往敵國和親虏冻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內容