資料結構 一
阿新 • • 發佈:2018-12-09
連結串列的基本功能
List.h程式
#ifndef _LIST_H_ #define _LIST_H_ typedef enum{TRUE,FLAST,ERROR}BOOL; typedef int Data; typedef struct _node { Data data; struct _node *next; }Node; typedef struct _list { Node *head; }List; //建立連結串列 List *CreateList(); //銷燬連結串列 void Destroy(List *pa); //頭插結點 BOOL Insert_Head(List *pa,Data data); //尾插結點 BOOL Insert_Last(List *pa,Data data); //特殊位置插入結點 BOOL Insert_Pos(List *pa,int pos,Data data); //刪除某位置的結點 BOOL Detele(List *pa,int pos); //按內容刪除結點 BOOL Detele_Data(List *pa,Data data); //連結串列逆序 void Reverse(List *pa); //列印函式 void Display(List *pa); #endif// _LIST_H_
List.c程式
#include "List.h" #include <stdlib.h> #include <stdio.h> List *CreateList() { List *pa=(List *)malloc(sizeof(List)/sizeof(char) ); if(NULL==pa) return NULL; pa->head=(Node *)malloc(sizeof(Node)/sizeof(char) ); if(NULL==pa->head) { free(pa); return NULL; } pa->head->next=NULL; return pa; } BOOL Insert_Head(List *pa,Data data) { Node *node=(Node *)malloc(sizeof(Node)/sizeof(char) ); if(NULL==node) return ERROR; node->data=data; node->next=pa->head->next; pa->head->next=node; return TRUE; } BOOL Insert_Last(List *pa,Data data) { Node *node=(Node *)malloc(sizeof(Node)/sizeof(char) ); if(NULL==node) return ERROR; node->data=data; node->next=NULL; Node *temp=pa->head; while(temp->next) { temp=temp->next; } temp->next=node; } BOOL Insert_Pos(List *pa,int pos,Data data) { if(NULL==pa||pos<0) return ERROR; Node *temp=pa->head; int i; for(i=0;i<pos-1;i++) { temp=temp->next; if(temp==NULL) { printf("你已越界%d\n",pos); return ERROR; } } Node *node=(Node *)malloc(sizeof(Node)/sizeof(char) ); if(NULL==node) return ERROR; node->data=data; node->next=temp->next; temp->next=node; return TRUE; } BOOL Detele(List *pa,int pos) { if(NULL==pa) return ERROR; Node *temp=pa->head; int i; for(i=0;i<pos-1;i++) { temp=temp->next; if(temp==NULL||temp->next==NULL) { printf("你已越界%d\n",pos); return ERROR; } } Node *p=temp->next; temp->next=p->next; free(p); return TRUE; } BOOL Detele_Data(List *pa,Data data) { if(NULL==pa) return ERROR; Node *temp=pa->head; while(temp->next) { if(temp->next->data==data) { Node *p=temp->next; temp->next=p->next; free(p); return FLAST; } temp=temp->next; } return TRUE; } void Reverse(List *pa) { if(NULL==pa||NULL==pa->head ||NULL==pa->head->next||NULL==pa->head->next->next) return ; Node *pre=pa->head->next; Node *cur=pre->next; Node *temp; while(cur) { temp=cur->next; cur->next=pre; pre=cur; cur=temp; } pa->head->next->next=NULL; pa->head->next=pre; } void Display(List *pa) { if(NULL==pa) return ; Node *temp=pa->head->next; while(temp) { printf("%-4d",temp->data); temp=temp->next; } printf("\n"); } void Destroy(List *pa) { if(NULL==pa) return; Node *temp=pa->head; while(temp->next) { Node *p=temp->next; temp->next=p->next; free(p); } free(pa->head); free(pa); }