程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C言語完成鏈表及其操作

C言語完成鏈表及其操作

編輯:關於C++

C言語完成鏈表及其操作。本站提示廣大學習愛好者:(C言語完成鏈表及其操作)文章只能為提供參考,不一定能成為您想要的結果。以下是C言語完成鏈表及其操作正文


#include <stdio.h>
#include <stdlib.h>

//定義節點
typedef struct Node
{
    int data;
    struct Node * PNext;
}*PNode,Node;

//初始化函數
PNode create_list();//創立節點
//打印出鏈表
void traverse_list(PNode);
//刪除節點pos  從1 開端
void delete_node(PNode,int,int *);

//拔出節點  pos 從1開端
void insert_data(PNode,int ,int );
void main()
{
    //int val;
    //定義頭指針
    PNode PHead=NULL;
    PHead=create_list();
    
    
    //delete_node(PHead,-1,&val);
    
    insert_data(PHead,-2,2);
    traverse_list(PHead);
}


PNode create_list()
{
    int len;
    int i;
    int val;
    //定義頭節點
    PNode PHead=(PNode)malloc(sizeof(Node));
    //內存缺乏等狀況會呈現分配內存失敗的狀況  發作錯誤解前往NULL
    if(PHead == NULL){
        printf("內存分配失敗");
    }
    PNode Ptail=PHead;
    //將頭節點的指針域指向NULL  假如沒有首節點指針域就是NULL 
    Ptail->PNext=NULL;

    /*
        思緒:
            定義節點ptail,永遠指向尾節點,一開端只要頭結點 頭結點也是尾節點,所以指向頭結點
        
            將新建的PNew節點掛載到ptail節點前面,掛載好之後,ptail指向新建的PNew節點,這樣保證ptail永遠指向尾節點
    */
    printf("請輸出初始化節點的數量\n");
    scanf("%d",&len);
    for(i=0;i<len;i++){
        printf("請輸出節點的值");
        scanf("%d",&val);

        PNode PNew=(PNode)malloc(sizeof(Node));
        PNew->data=val;
        Ptail->PNext=PNew;
        PNew->PNext=NULL;
        Ptail=PNew;
    }
    //前往首節點
    return PHead;
}

void traverse_list(PNode PHead)
{
    PNode p = PHead->PNext;
    //printf("%d\n",PHead->PNext);
    if(p == NULL)
    {
        printf("鏈表為空\n");
        exit(0);
    }
    while(p != NULL){
        printf("%d\n",p->data);
        p=p->PNext;
    }

}

void delete_node(PNode PHead,int pos,int * val)
{
    
    int i=0;
    if(PHead->PNext==NULL){
        printf("節點為空");
        exit(0);
    }
    if(pos <0){
        printf("沒無數據");
        exit(0);
    }
    PNode p=PHead;
    PNode t;
    PNode r;
    while(i != pos){
        //printf("%d\n",i=t->data);exit(0);
        t=p;
        if(i == pos-1){
            //printf("%d\n",i=p->PNext->PNext->data);exit(0);
            //exit(0);
            r=p->PNext;
            t->PNext=p->PNext->PNext;
            free(r);
            r=NULL;
            //exit(0);
            return;
        }
        i++;
        p=p->PNext;
    }
}

void insert_data(PNode PHead,int pos,int val)
{
    int i=0;
    PNode p=PHead;
    while(p != NULL && i<pos-1){
        p=p->PNext;
        i++;
    }
    if(p == NULL || i>pos -1){
        printf("拔出錯誤");
        return ;
    }

    PNode PNew=(PNode)malloc(sizeof(Node));
    if(PNew == NULL){
        printf("內存分配失敗");
        exit(-1);
    }
    PNode t=p->PNext;
    PNew->data=val;
    PNew->PNext=t;
    p->PNext=PNew;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved