#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...