建立完整的單向動態鏈表(包括初始化、創建、插入、刪除、查找、銷毀、輸出)


建立完整的單向鏈表

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
     int data;//數據部分
     struct node *next;//指針部分
}Node;
typedef Node List;
//初始化鏈表
List* initList();
//銷毀鏈表
void destoryList(List *list);
//插入數據
void insertData(List *list,int Data);
//刪除數據
void removeData(List *list,int Data);
//查找數據
Node* findData(List *list,int Data);
//打印鏈表內容
void printList(List *list);
int main()
{
        //初始化鏈表
        List *list = initList(); 
        //插入數據
        for(int i=0; i<10; i++)
        {
             insertData(list,i);
        }
        printList(list);
        //查找數據
        printf("5的地址:%p\n",findData(list,5));
        printf("10的地址:%p\n",findData(list,10));
        //刪除數據
        removeData(list,0);
        printList(list);
        //銷毀鏈表
        destoryList(list);
return 0;
}
//初始鏈表
List* initList()
{
        List *list = (List*)malloc(sizeof(Node));
        list->data = 0;
        list->next = NULL;
        return list;
}
//銷毀鏈表
void destoryList(List *list)
{
        Node *pHead = list;//用來記錄初始化的鏈表頭結點
        while(list != NULL)
        {
                  //先移到下一個結點
                  list = list->next;
                  //釋放頭結點
                  free(pHead);
                  //記錄新的頭結點
                 pHead = list;
         }
}
//插入數據(一般都在表尾插入數據)
void insertData(List *list,int Data)
{
         //先分配一個新的結點
        Node *pNode = (Node*)malloc(sizeof(Node));
        pNode->data = Data;
        pNode->next = NULL;
        //將新結點鏈接到到尾部
       while(list->next != NULL)
       {
                  list = list->next;//先找到鏈表的尾結點
        }
       list->next = pNode;//將新結點鏈接到尾結點
}
//刪除數據(頭結點不可刪除,不然后面的結點就無法再進行遍歷了)
void removeData(List *list,int Data)
{
        //1.查找結點,並記錄上一個結點
        //Node *pPre = NULL;
        Node *pPre = list;
        list = list->next;//跳過頭結點
        while(list!= NULL)
        {
                 if(list->data == Data)
                {
                              break;
                }
                pPre = list;
                list = list->next;
       }
       if(list!=NULL)
       {
                //2.找到后,將上一個結點和當前結點的下一個結點鏈接
                pPre->next = list->next;
               //3.刪除當前結點
                free(list);
      }
}
//查找數據
Node* findData(List *list,int Data)
{
     while(list!= NULL)
     {
                 if(list->data == Data)
                {
                      break;
                }
               list = list->next;
      }
return list;
}
//打印鏈表內容
void printList(List *list)
{
      list = list->next;//跳過頭結點
      while(list!= NULL)
      {
               printf("%5d",list->data);
              list = list->next;
      }
      printf("\n");
}
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM