雙鏈表基本操作的實現

2021-08-15 10:57:27 字數 1671 閱讀 2162

#includetypedef int elemtype;

typedef struct dnodednode, *dlinklist;

//初始化鍊錶,尾插法建立乙個雙鏈表

void creatlist(dlinklist *l)

p->next = null;

}//按序號查詢結點值

int getelem(dlinklist l,int i)

while(p&&jnext;

j++;

}printf("序號%d的值為:%d",i,p->data);

}//按值查詢結點

int locateelem(dlinklist l,elemtype e)

printf("值為%d的序號為:%d",e,i);

}//指定位置插入元素

int listinsert(dlinklist l,int i,elemtype e)

while(p&&jnext;

j++;

}dnode *s = (dlinklist)malloc(sizeof(dnode));

s->data = e;

s->next = p->next;

p->next->prior = s;

s->prior = p;

p->next = s;

return;

}//指定位置刪除元素

int listdelete(dlinklist l,int i)

while(p&&jnext;

j++;

}dnode *q = p->next;

p->next = q->next;

q->next->prior = p;

free(q);

return 1;

}//鍊錶列印

int printlist(dlinklist l)

if(i == 0)

return 1;

}//刪除鍊錶

int clearlist(dlinklist l)

l->next = null;

return 1;

}int main()

1.雙鏈表的引入:

單鏈表的節點中只有乙個指向其後繼的指標,這使得單鏈表只能從頭結點依次順序的向後遍歷。若要訪問某個結點的

前驅結點(插入、刪除操作時),只能從頭開始遍歷,訪問後繼結點的時間複雜度為o(1),訪問前驅結點的時間複雜度

為o(n)。

為克服單鏈表以上缺點,引入雙鏈表,雙鏈表指標域中有兩個指標prior和next,分別為其前驅結點和後繼結點。

2.雙鏈表的主要操作:

雙鏈表僅僅是在單鏈表的結點增加了乙個指向前驅的prior指標,因此,在雙鏈表中執行按序查詢和按值查詢的操作和單鏈表

的操作相同;但在插入和刪除操作的實現上,需要對prior指標做出修改。

插入操作:

s->next = p->next;

p->next->prior = s;

s->prior = p;

p->next = s;

刪除操作:

p->next = q->next;

q->next->prior = p;

free(q);

c 實現雙鏈表基本操作

include include include include c 實現雙鏈表的基本操作 using namespace std typedef struct student dnode 創立鍊錶 dnode creat else cycle 0 head head next head pre nu...

雙鏈表基本操作

1.在頭接點插入指定的值 template void insertd dnode front,const t value 2.顯示所有接點數值 template void showd dnode front 3.刪除接點 template void deleted dnode lhs 4。刪除指定資...

雙鏈表基本操作

看歐立奇的 程式設計師面試寶典 的雙向鍊錶部分,發現其中建立雙向鍊錶和刪除鍊錶中得某一點的程式存在問題,現將已經除錯通過的程式貼在下面 include using namespace std define len sizeof dnode typedef struct doublenode dnod...