1. 程式人生 > >單鏈表基本操作(1)

單鏈表基本操作(1)

單鏈表基本操作

建立

  • 建立
  • 頭插入載入
  • 尾插入載入

建立空連結串列

建立一個單鏈表,且為空表,並且返回連結串列
建立結構型別,在CS.c檔案中


typedef struct node{
    int data;
    struct node *next;
}LINKLIST;

在Link.h寫出方法宣告


#include <stdio.h>
#include "CS.c"

/*
 建立一個空單鏈表
 */
LINKLIST *inill();

在Link.c中實現此方法

#include "Link.h"
LINKLIST *inill(){
    LINKLIST *L;
    L=(LINKLIST *)malloc
(sizeof(LINKLIST)); L->next=NULL; L->data=-1; return (L); }

宣告一個連結串列變數,並且分配空間,設定next指標域為NULL,data資料域為-1.

在main.c中呼叫此方法,並且進行判斷

#include <stdio.h>
#include "Link.h"
int main(int argc, const char * argv[]) {

    //建立了空的連結串列
    LINKLIST *linklist=inill();
    printf("inill() method  create is a null  line %d \n"
,linklist->next==NULL); return 0; }

根據定義:頭結點的指標域存放指向首節點的指標,當連結串列為空時,首節點的指標為空,即:頭結點的指標域為空.

列印資料:
inill() method create is a null line 1
所以為linklist為空連結串列

頭插入載入

link.h

/*
 頭插入載入
 */
LINKLIST * loadHead();

link.c

LINKLIST * loadHead(){
    LINKLIST *p,*Q;
    int x;

    Q=(LINKLIST *)malloc
(sizeof(LINKLIST)); Q->data=-1; Q->next=NULL; printf("please input the integer to inster\n"); scanf("%d",&x); while (x!=-1) { p=(LINKLIST *) malloc(sizeof(LINKLIST)); p->data=x; p->next=Q->next; Q->next=p; scanf("%d",&x); } return Q; }

1.先建立一個空連結串列Q
2.然後從鍵盤輸入 x
3.這裡寫圖片描述

main.c

 //頭插入
    LINKLIST *headInsertList=loadHead();

    printf("headInsertList=[");

    while (headInsertList!=NULL) {
        if(headInsertList->data==-1){
            printf("%d",headInsertList->data);
        }else{
            printf(",%d",headInsertList->data);
        }
        headInsertList=headInsertList->next;
    }
    printf("]\n");

列印結果:


please input the integer to inster
1
2
3
4
5
-1
headInsertList=[-1,5,4,3,2,1]

尾插入載入

link.h

/*
 尾插入載入
 */
LINKLIST * loadRear();

link.c


LINKLIST * loadRear(){
    LINKLIST *q,*Q,*R;
    Q=(LINKLIST *) malloc(sizeof(LINKLIST));
    R=Q;
    Q->data=-1;
    Q->next=NULL;
    int x;
    printf("please insert integer \n");
    scanf("%d",&x);
    while (x!=-1) {
        q=(LINKLIST *) malloc(sizeof(LINKLIST));
        q->data=x;
        q->next=NULL;
        Q->next=q;
        Q=q;
        scanf("%d",&x);
    }
    return R;
}

解釋
1.建立了一個空連結串列Q,並且付給了R,
2.從鍵盤輸入x
3.輸入的資料不為-1
3.1建立一個空連結串列q
3.2設定q的資料域為x q->data=x;
3.3設定q的指標域為NULL
3.4設定Q的指標域為輸入的q
3.5最後把剛建立的連結串列賦給Q,供下次再次插入的時候使用,這是關鍵的一步操作
4.最後把R返回,表示連結串列的頭指標
這裡就不做流程圖了,就是按照的是頭插入載入差不多

main.c

//尾插入

    LINKLIST *lastInsertList=loadRear();

    printf("lastInsertList=[");

    while (lastInsertList!=NULL) {
        if(lastInsertList->data==-1){
            printf("%d",lastInsertList->data);
        }else{
            printf(",%d",lastInsertList->data);
        }
        lastInsertList=lastInsertList->next;
    }
    printf("]\n");

列印結果:

please insert integer 

1
2
3
4
5
-1
lastInsertList=[-1,1,2,3,4,5]
Program ended with exit code: 0

原始碼下載