首页 > 代码库 > C链表一——链表增删改查以及初始化的头插法与尾插法
C链表一——链表增删改查以及初始化的头插法与尾插法
线性表的链式存储又称为链表(物理实现方式);
链式存储是最常用的存储方式之一。它不仅可以用来表示线性表,而且可以用来表示各种非线性的数据结构;
链表又可分为单链表、双链表、循环链表等。
一:单链表
所谓单链表是指数据结点是单向排列的。它包括两个域,一个信息域用于存放数据,一个指针域用于存放下个结点的地址;
单链表中结点类型的描述如下:
struct Node{ ElemType data_; Node *next_; };
利用单链表可以解决顺序表需要大量的连续的存储空间的缺点,但是单链表附加了指针域,也带来了浪费存储空间的缺点。
注意:本文所有程序都是用“头指针”来表示一个单链表,而没有用带头结点的单链表。
头指针:是指向单链表第一个结点的指针;
头结点:单链表第一个结点之前附加的一个结点,此时,头指针指向头结点,头结点的指针域指向单链表的第一个结点;
结点的定义以及打印函数:
//结点声明typedef struct tag{ int Nnum_; struct tag *Nnext_;}Node, *pNode;//打印函数void link_print(pNode phead){ while(phead != NULL) { printf("Node_value:%4d\n", phead->Nnum_); phead = phead->Nnext_; }}
一:利用尾插法初始化单链表
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>typedef struct tag{ int Nnum_; struct tag *Nnext_;}Node, *pNode;void link_print(pNode phead){ while(phead != NULL) { printf("Node_value:%4d\n", phead->Nnum_); phead = phead->Nnext_; }}void link_init_tail(pNode *phead, int size) //传的是地址{ pNode pNew = NULL; pNode pTail = NULL; while( size > 0) { //申请内存 pNew = (pNode)malloc(sizeof(Node)); //注意这里为何不用pNode而用Node,因为sizeof(pNode) = 4 //赋值 pNew->Nnum_ = rand()%1000; //插入链表 if(*phead == NULL) //链表为空时 { *phead = pNew;//连接新的结点 pTail = pNew; } else//不为空 { pTail->Nnext_ = pNew ; //连接新的结点 pTail = pNew; //改名字 } size --; }}int main(int argc, char const *argv[]){ srand(time(NULL)); pNode phead = NULL; link_init_tail(&phead, 10); link_print(phead); return 0;}
C链表一——链表增删改查以及初始化的头插法与尾插法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。