前言:
此刻你们对“c语言创建链表并输入数据”大约比较重视,咱们都想要分析一些“c语言创建链表并输入数据”的相关文章。那么小编也在网摘上网罗了一些有关“c语言创建链表并输入数据””的相关文章,希望你们能喜欢,大家一起来学习一下吧!#暑期创作大赛#
用C语言创建单向链表,并且实现链表的插入与删除
#include <stdio.h>#include <stdlib.h>struct LinkNode{ int data; struct LinkNode *next;}; typedef struct LinkNode *Lnode;struct LinkList{ Lnode pHeader; //头节点 int m_Size; //长度};typedef struct LinkList *Llist;// 初始化链表Llist init_list(){ Llist l1 = malloc(sizeof(struct LinkList)); if (l1 == NULL) printf("内存分配失败"); l1->pHeader = malloc(sizeof(struct LinkNode)); l1->pHeader->data = 0; l1->pHeader->next = NULL; l1->m_Size = 0; return l1;}// 插入元素void insert(Llist list, int p, int data){ int i = 0; if((p < 0) || (p > list->m_Size)) p = list->m_Size; Lnode q = list->pHeader; for (i = 0; i < p; ++i) { q = q->next; } Lnode new_node = malloc(sizeof(struct LinkNode)); if(new_node == NULL) printf("内存分配失败"); new_node->next = q->next; new_node->data = data; q->next = new_node; list->m_Size++;} // 遍历链表void travel(Llist list){ Lnode q = list->pHeader; printf("链表内容为: "); while(q->next != NULL) { q = q->next; printf("%d ", q->data); } printf("\n");}// 删除元素void delete(Llist list, int p){ int i = 0; if((p < 0) || (p >= list->m_Size)) { printf("节点%d不存在\n", p); return; } Lnode q = list->pHeader; for (i = 0; i < (p-1); ++i) { q = q->next; } Lnode qDel = q->next; q->next = qDel->next; free(qDel); qDel = NULL; list->m_Size -= 1;}// 清空链表void clear(Llist list){ int i = 0; Lnode q = list->pHeader->next; for (i = 0; i < list->m_Size; ++i) { Lnode p = q->next; free(q); q = p; } list->pHeader->next = NULL; list->m_Size = 0;}int main(int argc, char const *argv[]){ Llist L; L = init_list(); printf("链表头地址为%p\n", L); // 插入元素 insert(L, 0, 35); insert(L, 1, 0); insert(L, 2 , 9); insert(L, 3, 13); travel(L); // 删除元素 delete(L, 2); delete(L, 15); travel(L); // 清空链表 clear(L); travel(L); return 0;}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #c语言创建链表并输入数据