C語言連結串列實現(郝斌數連結串列學習筆記)
阿新 • • 發佈:2021-11-05
#include "stdafx.h" #include<stdio.h> #include<stdlib.h> typedef struct Node { int data ;//資料域 struct Node * pNext; //指標域 這個指標域它指向的是跟它本身一樣的資料型別的另一個節點 }NODE,*PNODE; //NODE等價於struct Node PNODE等價於struct Node* PNODE create_list(void); void traverse_list(PNODE pHead); bool is_empty(PNODE pHead); int length_list(PNODE); bool insert_list(PNODE,int,int); bool delete_list(PNODE,int ,int*); //動態分配的記憶體 int main(int argc, char* argv[]) { PNODE pHead = NULL; //等價於struct Node * pHead = Null 頭節點 pHead = create_list();//create_list():建立一個非迴圈單鏈表,並將該連結串列的頭節點的地址賦給pHead traverse_list(pHead); system("pause"); return 0; } PNODE create_list(void)//返回型別為地址 PNODE = struct Node* { int len;//用來存放有效結點的個數 int i; int val;//用來臨時存放使用者輸入的結點的值 //分配了一個不存放有效資料的頭節點,不能叫頭指標 PNODE pHead = (PNODE)malloc(sizeof(NODE));//分配頭節點的首地址給了pHead PNODE = struct Node* if (NULL==pHead) { printf("分配失敗,程式失敗!"); exit(-1); } PNODE pTail = pHead; //尾結點 初始化 pTail->pNext = NULL; //用來清空尾結點的指標域 printf("請輸入您需要生成的連結串列節點的個數:len = \n"); scanf("%d",&len); for( i = 0; i<len;++i) { printf("請輸入第%d個節點的值",i+1); scanf("%d",&val); PNODE pNew = (PNODE)malloc(sizeof(NODE));// PNODE等價於struct Node* if(NULL==pNew) { printf("分配失敗,程式終止"); } pNew->data =val;// 將變數值賦值到結點的資料域當中 pTail->pNext = pNew; //將新的結點掛到尾結點 pNew->pNext = NULL; pTail = pNew; } return pHead; } void traverse_list(PNODE pHead) { //連結串列不能用陣列來遍歷 PNODE p = pHead->pNext; //p指向第一個有效結點 while (NULL!=p) { printf("%d ",p->data); p = p->pNext; } printf("\n"); return ; }