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; }