#include<stdio.h>
typedef struct LINK
{
int num;
struct LINK *pre;
struct LINK *next;
}LINK,*pLINK;
int getNum()
{
int num;
printf("請輸入數(shù)字:");
scanf("%d",&num);
return num;
}
pLINK createDoubleList(pLINK head)
{
if(head==NULL)
{
head=(pLINK)malloc(sizeof(LINK));
head->pre=NULL;
head->next=NULL;
}
printf("雙鏈表創(chuàng)建成功!\n");
return head;
}
void headInsertData(pLINK head)
{
if(head==NULL)
{
printf("沒有創(chuàng)建雙鏈表\n");
return ;
}
if(head->next==NULL)
{
pLINK p=(pLINK)malloc(sizeof(LINK));
p->num=getNum();
p->next=NULL;
p->pre=head;
head->next=p;
return ;
}
pLINK p=(pLINK)malloc(sizeof(LINK));
p->num=getNum();
p->next=head->next;
p->pre=head;
head->next=p;
p->next->pre=p;
}
void tailInsertData(pLINK head)
{
if(head==NULL)
{
printf("沒有創(chuàng)建雙鏈表\n");
return ;
}
//找尾指針:最后一個(gè)節(jié)點(diǎn)的地址
pLINK temp;
for(temp=head;temp->next!=NULL;temp=temp->next);
//這個(gè)循環(huán)跳出的條件:temp->next==null;
pLINK p=(pLINK)malloc(sizeof(LINK));
p->num=getNum(head);
p->next=NULL;
p->pre=temp;
temp->next=p;
printf("尾部數(shù)據(jù)插入成功\n");
}
void headDeleteData(pLINK head)
{
if(head==NULL||head->next==NULL)
{
printf("無信息可刪\n");
return;
}
if(head->next->next==NULL)
{
free(head->next);
head->next=NULL;
return;
}
pLINK p=head->next;
head->next=p->next;
p->next->pre=head;
free(p);
p=NULL;
}
void tailDeleteData(pLINK head)
{
if(head==NULL||head->next==NULL)
{
printf("無信息可刪\n");
return;
}
pLINK temp;
for(temp=head;temp->next!=NULL;temp=temp->next);
pLINK p=temp->pre;
free(temp);
p->next=NULL;
}
void printData(pLINK head)//打印信息
{
if(head==NULL||head->next==NULL)
{
printf("無信息可打印\n");
return;
}
pLINK temp;
printf("head-->");
for(temp=head->next;temp!=NULL;temp=temp->next)
{
printf("[%d]-->",temp->num);
}
printf("NULL\n");
}
int main()
{
pLINK head=NULL;
int select;
while (1)
{
printf("========\n");
printf("1.創(chuàng)建鏈表\n");
printf("2.頭插文件\n");
printf("3.尾插文件\n");
printf("4.頭刪文件\n");
printf("5.尾刪文件\n");
printf("6.打印數(shù)據(jù)\n");
printf("7.退出\n");
printf("========\n");
scanf("%d",&select);
switch(select)
{
case 1:
head=createDoubleList(head);
break;
case 2:
headInsertData(head);
break;
case 3:
tailInsertData(head);
break;
case 4:
headDeleteData(head);
break;
case 5:
tailDeleteData(head);
break;
case 6:
printData(head);
break;
case 7:
return 0;
default:
break;
}
}
}
雙鏈表
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 聯(lián)合體 聯(lián)合體:多個(gè)成員變量公用同一塊空間,一個(gè)時(shí)間段只能用其中的一個(gè)成員.如果成員變量都是基本數(shù)據(jù)類型,那么這個(gè)...
- 最近在復(fù)習(xí)數(shù)據(jù)結(jié)構(gòu)時(shí),感觸頗深。 推薦程序員們有時(shí)間都可以復(fù)習(xí)下, 數(shù)據(jù)結(jié)構(gòu)不僅僅是一門課程, 它更能理清我們開發(fā)...
- 1. 循環(huán)鏈表 與單鏈表基本無異,但有如下兩點(diǎn)需要注意:(1)最后一結(jié)點(diǎn)的指針域必須指向頭結(jié)點(diǎn),這樣才能循環(huán)(注意...