線性表之單鏈表

對比了好幾本書,比較少涉及單鏈表的賦值,為了親自跑出其他功能,花了不少時(shí)間,畢竟是打基礎(chǔ)嘛,相信以后會越來熟練(你為什么那么熟練^ ^)話不多說,下面是代碼及實(shí)驗(yàn)結(jié)果。
 


這里寫圖片描述
#include <cstdio>
#include <cstdlib>
#define  ElementType int
#define MAXSIZE 1000
#define ERROR -1


/*線性表-順序表-結(jié)構(gòu)體定義*/
typedef struct LNode *PtrToLNode;
struct LNode {
    ElementType Data;
    PtrToLNode Next;                                       /*最后一個位置下標(biāo),用來計(jì)算順序表的長度*/
};
struct LNode L;
PtrToLNode PtrL = &L;



/*初始化-賦值*/
PtrToLNode CreatNewList(PtrToLNode PtrL , int data){
    PtrToLNode q = PtrL;
    PtrToLNode p = (PtrToLNode)malloc(sizeof(struct LNode));
    p->Next = NULL;
    p->Data = data;
    if( NULL == PtrL ){
        PtrL = p;
    }
    else{
        while(q->Next)
            q = q->Next;
        q->Next = p;
    }
    return PtrL;
}

/*遍歷-打印*/
int ShowNewList(PtrToLNode PtrL ){
    PtrToLNode p = PtrL;
    while(p){
        printf("%d",p->Data);
        p = p->Next;
    }
    printf("\n");
    return 1;
}

/*遍歷-求表長*/
int Length(PtrToLNode PtrL){
    PtrToLNode p = PtrL;    /*p指向表第一個節(jié)點(diǎn)*/
    int j = 0;
    while(p){
        p = p->Next;
        j++;    /*此時(shí)p指向第j個節(jié)點(diǎn)*/
    }
    return j;
}





/* 按序查找 */
/* 查找第K個數(shù),并返回其值的指針 */
PtrToLNode FindKth( int K, PtrToLNode PtrL )
{   PtrToLNode p = PtrL;    /*p指向表第一個節(jié)點(diǎn)*/
    int i = 1;
    while( p != NULL && i < K ){
        p = p->Next;
        i++;
    }
    if ( i == K )  return p;    /* 如果找到,返回指針 */
    else  return NULL;
}
/* 按值查找 */
/* 查找X,并返回其值位置 */
int Find( int X, PtrToLNode PtrL )
{   PtrToLNode p = PtrL;    /*p指向表第一個節(jié)點(diǎn)*/
    int j = 1;
    while( p != NULL && p->Data != X ){
        p = p->Next;
        j++;
    }
    return j;
}


/* 插入 */
/* 必須知道前一個節(jié)點(diǎn)才能插入 */
PtrToLNode Insert( PtrToLNode PtrL, ElementType X, int i )
{
    PtrToLNode p,s;
    if(i == 1){ //第一個節(jié)點(diǎn)特殊處理
        s = (PtrToLNode)malloc(sizeof(struct LNode));
        s->Data = X;
        s->Next = PtrL;
        return s;
    }
    p = FindKth(i-1,PtrL);
    if(p == NULL){
        printf("參數(shù)i錯誤");
        return NULL;
    }
    else{
        s = (PtrToLNode)malloc(sizeof(struct LNode));
        s->Data = X;
        s->Next = p->Next;
        p->Next = s;
        return PtrL;
    }
}

/* 刪除 */
/* 必須知道前一個節(jié)點(diǎn)才能刪除 */
PtrToLNode Delete( PtrToLNode PtrL, int i){
    PtrToLNode p,s;
    if(i == 1){  //第一個節(jié)點(diǎn)特殊處理
        s = PtrL;
        if(PtrL != NULL) PtrL = PtrL->Next; //鏈跳過第一個節(jié)點(diǎn)
        else return NULL;
        free(s);
        return PtrL;
    }
    p = FindKth(i-1,PtrL);
    if(p == NULL){
        printf("第 %d 個結(jié)點(diǎn)不存在",i-1); return NULL;
    }
    else if(p->Next == NULL){
        printf("第 %d 個結(jié)點(diǎn)不存在",i-1); return NULL;
    }
    else{
        s = p->Next;
        p->Next = s->Next;  //跳過s
        free(s);
        return PtrL;
    }
}

void DestoryList( PtrToLNode PtrL )
{
        PtrToLNode p;

        if(PtrL == NULL)
                return;

        while(PtrL)
        {
                p = PtrL;
                PtrL=PtrL->Next;
                free(p);
        }
}



int main()
{
    int i,l,n,x,K,j,X;
    int m,M,d;
    PtrToLNode PtrL,find1,find2;
    scanf("%d",&n);
    for(i = 0; i < n; i++){
        scanf("%d",&x);
        PtrL = CreatNewList(PtrL , x);
    }
    l = Length(PtrL);
    printf("Length = %d \n",l);
    ShowNewList(PtrL);

    printf("Find Kth number, input K :");
    scanf("%d",&K);
    find1 = FindKth( K,  PtrL );
    printf("Kth = %d\n",find1->Data);

    printf("Find a number, input number :");
    scanf("%d",&X);
    j = Find( X, PtrL );
    printf("%d is in the %d th position\n", X,j);

    printf("insert m in M ,input m M :");
    scanf("%d %d",&m,&M);
    PtrL = Insert( PtrL,  m,  M );
    ShowNewList(PtrL);

    printf("delete d th number, input d :");
    scanf("%d",&d);
    PtrL = Delete( PtrL, d);
    ShowNewList(PtrL);

    DestoryList(PtrL);



    return 0;
}

最后編輯于
?著作權(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)容