//創建鏈接列表
# include & ltstdlib.h & gt
# include & ltiostream.h & gt
# include & ltconio.h & gt
#定義真1
#定義假0
#定義OK 1
#定義錯誤0
#定義不可行-1
#定義溢出-2
typedef結構模塊節點
{ int數據;
struct DuLNode * prior
struct DuLNode * next
}DuLNode,* DuLinkList
//初始條件:l已經存在。運算結果:返回l中數據元素的個數。
int ListLength(DuLinkList L)
{
int I = 0;
DuLinkList p = L-& gt;接下來;// p指向第壹個節點。
而(p!=L) // p不在頭中
{
i++;
p = p-& gt;接下來;
}
返回I;
}
//從雙鏈循環線性表L的頭節點開始,按正序輸出每個數據元素。
void ListTraverse(DuLinkList L)
{
DuLinkList p = L-& gt;接下來;
而(p!=L)
{
cout & lt& ltp->;數據& lt& lt”\ t”;
p = p-& gt;接下來;
}
cout & lt& ltendl
}
//從雙鏈循環線性表L的頭節點開始,逆序輸出每個數據元素。
void list traverse back(DuLinkList L)
{
DuLinkList p = L-& gt;先驗;
而(p!=L)
{
cout & lt& ltp->;數據& lt& lt”\ t”;
p = p-& gt;先驗;
}
cout & lt& ltendl
}
//創建帶有HeadNode的DuLinkList L
void create list _ DuL(DuLinkList & amp;l)
{
int n;
int I;
DuLNode * p;
l =(DuLinkList)malloc(sizeof(dul node));
l-& gt;next = L-& gt;先驗= L;
cout & lt& lt" CreateList _ L " & lt& ltendl & lt& lt" = = = = = = = = = = = = = = = = " & lt& ltendl
cout & lt& lt"請輸入初始DuLinkNode號:& lt例5 >;
CIN & gt;& gtn;
cout & lt& lt"請輸入DuLinkList節點的數據:& lt例如34,67,3,-9,45,...>& lt& ltendl
for(I = n;我& gt0;-我)
{
p =(DuLinkList)malloc(sizeof(dul node));
CIN & gt;& gtp->;數據;//創建鏈表的逆序輸入
p->;先驗= L;
p->;next = L-& gt;接下來;
l-& gt;下壹個-& gt;先驗= p;
l-& gt;next = p;
}
如果(n)
{
cout & lt& ltendl
cout & lt& lt"成功創建DuLinkList!"& lt& ltendl
list traverse(L);
cout & lt& ltendl
}
else cout & lt& lt"創建了壹個空的鏈接列表!"& lt& ltendl
}
//ListInsert_Dul()
int list insert _ DuL(DuLinkList & amp;l)
{
DuLNode *p=L,* s;
int j = 0;
int I;
int e;
cout & lt& lt" = = = = = = " & lt& lt在插入之前:“& lt& lt" = = = = = = " & lt& ltendl
list traverse(L);
cout & lt& lt”輸入要插入的位置:“;
CIN & gt;& gt我;
while(我& lt1 | | I & gt;列表長度(L)+1)
{
//i值非法。
cout & lt& lt非法位置,請輸入正確的位置。
CIN & gt;& gt我;
}
cout & lt& lt"輸入要插入的數字:";
CIN & gt;& gte;
while(j & lt;我)
{ p = p-& gt;接下來;
++ j;
}
如果(!(s =(DuLinkList)malloc(sizeof(dul node))))
{
cout & lt& ltendl & lt& lt“分配空間失敗!”;
返回(錯誤);
}
s-& gt;數據= e;
s-& gt;prior=p->先驗;
s-& gt;next = p;
if(i==1)
l-& gt;next = s;
p->;先驗->;next = s;
p->;先驗= s;
cout & lt& lt已插入:“& lt& lte & lt& ltendl
list traverse(L);
cout & lt& lt" = = = = = = " & lt& lt插入後:“& lt& lt" = = = = = = " & lt& ltendl & lt& ltendl
退貨(OK);
}
//刪除具有前導節點的雙鏈循環線性表L的第I個元素。I的合法值是1≤i≤表長。
int ListDelete(DuLinkList L)
{
DuLinkList p;
int j = 1;// j是計數器。
int e;
int I;
cout & lt& lt“輸入您要刪除的號碼的位置”& lt& ltendl
CIN & gt;& gt我;
while(我& lt0 | | i & gt列表長度(L))
{
//i值非法。
cout & lt& lt非法位置,請輸入正確的位置。
CIN & gt;& gt我;
}
p = L-& gt;接下來;// p指向第壹個節點。
而(p!= L & amp& ampj & ltI) //沿著指針向後看,直到P指向第I個元素或者P指向頭節點。
{
p = p-& gt;接下來;
j++;
}
if(p = = L | | j & gt;I) //第I個元素不存在。
{
cout & lt& lt"第I個元素不存在"
返回錯誤;
}
其他
{
cout & lt& lt" = = = = = = " & lt& lt刪除前:“& lt& lt" = = = = = = " & lt& ltendl
list traverse(L);
e = p-& gt;數據;//取第I個元素
如果(!P) // p=NULL,即第I個元素不存在。
返回錯誤;
e = p-& gt;數據;
p->;先驗->;next = p-& gt;接下來;
p->;下壹個-& gt;prior=p->先驗;
免費(p);
cout & lt& lt已刪除:“& lt& lte & lt& ltendl
list traverse(L);
cout & lt& lt" = = = = = = " & lt& lt刪除後:“& lt& lt" = = = = = = " & lt& ltendl & lt& ltendl
退貨OK;
}
}
無效菜單(int c)
{
cout & lt& lt" = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = " & lt;& ltendl
cout & lt& lt" \ t \ t 1-建立"
cout & lt& lt" \ t \ T2-插入"
cout & lt& lt" \ t \ T3-刪除"
cout & lt& lt" \ t \ T4-反向"
//cout & lt;& lt" \ t \ t5-菜單"
cout & lt& lt" \ t \ t0-退出"
cout & lt& lt" = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = " & lt;& ltendl
cout & lt& ltendl & lt& lt”輸入您選擇的號碼:“;
}
void main()
{
DuLinkList L;
int c = 1;
而(c!=0)
{
開關(c)
{
案例0:
打破;
案例1:
create list _ DuL(L);
打破;
案例二:
list insert _ DuL(L);
打破;
案例三:
list delete(L);
打破;
案例4:
listraverseback(L);
打破;
默認值:
cout & lt& lt不可行的選擇,再次輸入:“& lt& ltendl
菜單(c);
CIN & gt;& gtc;
}
如果(c!=0)
{
菜單(c);
CIN & gt;& gtc;
}
}
}