雙鏈表

#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ù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容