資料結構之 連結串列(List)的C語言的實現
阿新 • • 發佈:2018-12-12
#include<stdio.h> #include<stdlib.h> #include<stdbool.h> typedef struct Node{ int data; struct Node * next; }NODE,*PNODE; //函式宣告 PNODE Creat(int n){ //建表 int i=0; PNODE phead = (PNODE)malloc(sizeof(NODE)); if(phead==NULL){ printf("建立空間失敗!系統退出"); exit(-1); } PNODE ptail = phead; ptail->next=NULL; for(i=0;i<n;i++){ int val; printf("請輸入data值"); scanf("%d",&val); PNODE pnew =(PNODE)malloc(sizeof(NODE)); if(pnew==NULL){ printf("分配失敗!程式停止"); exit(-1); } pnew->data=val; ptail->next=pnew; pnew->next=NULL; ptail=pnew; } return phead; } void Traverse (PNODE phead){ //遍歷 PNODE p = phead->next; printf("連結串列的內容為:"); while(p!=NULL){ printf("%d ",p->data); p=p->next; } printf("\n"); } void IsEmpty(PNODE phead){ if(phead->next==NULL){ printf("連結串列為空\n"); } else{ printf("連結串列不為空\n"); } } int Length(PNODE phead){ //長度 PNODE p=phead->next; int count=0; while(p!=NULL ){ count++; p=p->next; } return count; } void Insert(PNODE phead,int pos,int val){ //插入節點 int i=0; PNODE p=phead; while(p!=NULL && i<pos-1){ p=p->next; i++; } if(i>pos-1 || p==NULL){ printf("輸入有誤,程式退出!"); exit(-1); } PNODE pnew=(PNODE)malloc(sizeof(NODE)); if(pnew==NULL){ printf("動態分配記憶體失敗!\n"); exit(-1); } pnew->data=val; PNODE q= p->next; p->next=pnew; pnew->next=q; printf("值已插入,插入的值為:%d",val); } void delete(PNODE phead,int pos){ int i=0; PNODE p=phead; while(p->next!=NULL && i<pos-1){ p=p->next; i++; } PNODE q =p->next; p->next=p->next->next; free(q); q=NULL; } int main(){ PNODE phead=NULL; phead=Creat(5); Traverse(phead); printf("判斷連結串列是否為空:"); IsEmpty(phead); printf("連結串列長度為:%d\n",Length(phead)); Insert(phead,2,6); Traverse(phead); delete(phead,2); Traverse(phead); }