链表:一系列结构连在一起,每一个结构体变量里面都有一个指针pNext,pNext指向下一个结构体变量,尾节点的pNext指向NULL。 静态链表:structstudents stu1 = { 1, 'a', NULL }; structstudents stu2 = { 2, 'b', NULL }; structstudents stu3 = { 3, 'c', NULL }; stu3.pNext = &stu2; stu2.pNext = &stu1; 动态内存分配: Malloc(); void *malloc(unsigned int size) 这个函数在内存中动态开辟一块内存,unsigned int size决定内存的大小,void *空指针可以强制转换为任何类型的指针。 这个函数返回一个指针,这个指针就是开辟的内存地址。 pHead = (structstudents*)malloc(sizeof(structstudents)); free(); void free(void *ptr) free:释放内存。 free(pHead); 1、怎样来创建一个链表。 创建一块内存: struct students *pHead = NULL; //头指针 struct students *pEnd = NULL; //尾指针 pHead = (struct students *)malloc(sizeof(struct students)); //开辟头结点 printf('请输入一个学生的学号和姓名:\n'); scanf('%d%s', &pHead->number, pHead->name); pHead->pNext = NULL; printf('%d\n', pHead->number); 增: 1、头部增加:头结点会变 需要返回一个pHead。 2、新节点的pNext指向pHead。 3、pHead指向pNew。 注意:2和3不能逆序。 //在头部插入一个节点 structstudents *InsertAtHead(structstudents *pHead) { //新建一个节点 printf('\n\n在头部插入一个节点\n'); structstudents *pNew; pNew = (structstudents*)malloc(sizeof(structstudents)); printf('请输入新学生的信息!\n'); scanf('%d%s', &pNew->number, pNew->name); pNew->pNext = pHead; //让新节点的pNext-》原来的头结点。 pHead = pNew; //把pHead指向新节点 count++; //节点数+1 returnpHead; } 2、在尾部插入一个节点。 1、创建一个节点pNew 2、顶一个中间的指针pTemp 通过循环(条件为pTemp->pNext!=null).得到尾节点。 3、pTemp->pNext=pNew; pNew->pNext=NULL; 在尾部插入一个节点 void InsertAtEnd(structstudents *pHead) { //新建一个节点 printf('\n\n在尾部插入一个节点\n'); structstudents *pNew; pNew = (structstudents*)malloc(sizeof(structstudents)); printf('请输入新学生的信息!\n'); scanf('%d%s', &pNew->number, pNew->name); structstudents *pTemp; pTemp = pHead; //for (int i = 1; i < count;="" i++)=""> //{ // pTemp = pTemp->pNext; //} //for (; pTemp->pNext != NULL; pTemp = pTemp->pNext); while (pTemp->pNext != NULL) { pTemp = pTemp->pNext; } pNew->pNext = NULL; pTemp->pNext = pNew; count++; //节点数 } 在中间插入 //在中间(第几个节点之后)插入节点 void InsertAtMid(structstudents *pHead, intindex) { //新建一个节点 printf('\n\n在第%d个节点后插入一个节点\n',index); structstudents *pNew; pNew = (structstudents*)malloc(sizeof(structstudents)); printf('请输入新学生的信息!\n'); scanf('%d%s', &pNew->number, pNew->name); structstudents *pTemp; structstudents *pPre; pTemp = pHead; pPre = pHead; for (int i = 1; i < index+1;="" i++)="" 假设index="2"> { pPre = pTemp; pTemp = pTemp->pNext; } pPre->pNext = pNew; pNew->pNext = pTemp; count++; } 今天小编就详解到这了哦!感谢大家的分享,小编会持续更新完C语言基础的所有章节!喜欢的读者请关注并转发!留言在评论区,小编看到了会回复大家! |
|