单向链表

来源:互联网 发布:上海定做衬衫 知乎 编辑:程序博客网 时间:2024/06/05 17:21

单向链表:链表头不包含有效数据,每个节点的next指向下一个节点,最后一个节点的next指向NULL,单向链表的操作只允许一个方向。


节点数据结构:

typedef int datatype;typedef struct linklist{datatype data;struct linklist *next;}singlelist,*psinglelist;

初始化单链表头结点:

void SingleList_Init(psinglelist *Head) {*Head = (psinglelist)malloc(sizeof(singlelist));if(*Head == NULL){perror("malloc");exit(1);}(*Head)->next = NULL;}


从尾部插入节点:

int SingleList_InsertTail(psinglelist Head,psinglelist New){psinglelist node;if(Head==NULL){perror("psinglelist Head error");return -1;}if(Head->next==NULL){Head->next = New;New->next = NULL;}else{/* 使node走到尾节点 */for( node = Head->next; node->next != NULL; node = node->next);node->next = New;New->next = NULL;}return 0;}

从头部插入节点:
int SingleList_InsertHead(psinglelist Head,psinglelist New){psinglelist node;if(Head==NULL){perror("psinglelist Head error");return -1;}New->next = Head->next;Head->next = New;return 0;}

创建n个节点:

int SingleList_Create(psinglelist Head,int n){int i;psinglelist node;if(Head==NULL){perror("psinglelist Head error");return -1;}for(i = 0; i < n; i++){node = (psinglelist)malloc(sizeof(singlelist));if(node == NULL){perror("malloc");exit(1);}printf("请输入第%d个节点的数据:",i+1);scanf("%d",&node->data);SingleList_InsertTail(Head,node);}}


删除指定数据的节点:

void SingleList_Delete(psinglelist Head,datatype data){psinglelist pPre; /* 用于保存待删除节点的上一个节点 */psinglelist H = Head;while(NULL!=Head->next){pPre = H;     /* 先保存当前节点 */H = H->next;  /* 指向下一个节点 *//* 找到要删除的节点 */if(H->data == data){/* 如果这个是链表的尾节点 */if(H->next==NULL){pPre->next = NULL;free(H);}else{pPre->next = H->next;free(H);}printf("删除节点成功\n");return;}}printf("没有找到该节点!\n");}

遍历单向链表:

int SingleList_each(psinglelist Head){psinglelist H;if(Head==NULL){perror("psinglelist Head error");return -1;}printf("链表数据:");for(H = Head->next; H != NULL; H = H->next){printf(" %d",H->data);}printf("\n");}


实例代码:

int main(void){psinglelist list;datatype data;SingleList_Init(&list);SingleList_Create(list, 5);SingleList_each(list);printf("请输入删除的数据:");scanf("%d",&data);SingleList_Delete(list,data);SingleList_each(list);}

实例效果:



原创粉丝点击