首页 > 编程知识 正文

单链表和循环链表的区别,不带头节点的单链表

时间:2023-05-04 10:33:23 阅读:117326 作者:988

文章列表开头节点的操作代码代码代码代码开头节点的操作代码

在下面的代码中,传递链表时,传递一个头部指针。 如果是第一个节点的链表,则可以在传递链表时传递第一个节点。 具体来说,c语言的实现-您可以看到线性表的链式存储(单链表)

第一个节点的单链表和第一个节点的单链表的区别:

对于第一个节点的单链表,在进行插入、删除操作时不需要更改链表的开头指针。

对于没有第一个节点的单链表,在进行插入、删除操作时可能涉及修改链表的第一个指针。 因此,如果链表作为参数传递,则传递对第一个指针的引用。 具体而言,可以看到代码的head_insert方法的指针变量带有地址说明符,而代码没有。 因为在开头节点的单链表中进行头插入操作需要修改头指针,在开头节点的单链表中不进行头插入操作的情况下不需要修改头指针)

具体代码也略有不同,但可以比较代码和代码

开头节点的单链表和不具有开头节点的init ) )的初始化都修改了开头指针,所以指针变量带有地址指定符

不操作开头节点

组代码本质相同。 不过,我自己不太了解地址、指针、引用和指针变量的概念,所以我把这四组代码进行了比较,以便自己以后复习和理解。 读者跳过 ,直接查看的代码即可

代码# include stdio.h # include malloc.htypedefstructlnode { int data; 结构节点*下一步; (; voidinit(lnode**L ) {*L=NULL; }voidhead_insert(lnode**L,int x ) lnode * newp=(lnode * ) malloc ) sizeof (lnode ) ); newP-data=x; newP-next=*L; *L=newP; }lnode*get(lnode*l,int k ) if ) k1 ) {printf )“位置搜索不正确! ”); 返回空值; (}int i=1; if(L!=NULL i=k ) {L=L-next; I; }if(I==k ) {return L; }printf ('搜索位置不正确!' ); 返回空值; }语音打印(lnode * l ) (printf ) ) (n ); while(L ) {printf )、L-data ); L=L-next; }printf((n ); (}int main ) ) {LNode *L; init(L; HEAD_insert(L,15; HEAD_insert(L,25; HEAD_insert(L,35; 打印(l ); printf((nm(n ),get ) l,2 )-data ); 返回0; }代码# include stdio.h # include malloc.htypedefstructlnode { int data; 结构节点*下一步; (; voidinit(lnode*L ) {L=NULL; }voidhead_insert(lnode*L,int x ) lnode * newp=(lnode * ) malloc (sizeof ) lnode ) ); newP-data=x; newP-next=L; L=newP; }lnode*get(lnode*l,int k ) if ) k1 ) {printf )“位置搜索不正确! ”); 返回空值; (}int i=1; if(L!=NULL i=k ) {L=L-next; I; (if ) I==k ) {返回l; }printf ('搜索位置不正确!' ); 返回空值; }语音打印(lnode * l ) (printf ) ) (n ); while(L ) {printf )、L-data ); L=L-next; }printf((n ); (}int main ) ) {LNode *L; init(L; HEAD_insert(L,15; HEAD_insert(L,25; HEAD_insert(L,35; 打印(l ); printf((nm(n ),get ) l,2 )-data ); 返回0; }代码# include stdio.h # include malloc.htypedefstructlnode { int data; 结构节点*下一步; (} *链接列表; void init (链接列表* l ) {*L=NULL; } void head _ insert (链接列表* l,int x )链接列表newp=(链接列表) malloc ) sizeof(lnode ); newP-data=x; newP-next=*L; *L=newP; }链接列表get (链接列表l,int k ) if ) k1 ) {printf )“位置搜索不正确! ”); 返回空值; (}int i=1; if(L!=NULL i=k ) {L=L-next; I; }if(I==k ) {return L; }printf ('搜索位置不正确!' ); 返回空值; }语音打印(链接列表l )打印) (n ); while(L ) {printf )、L-data ); L=L-next; }printf((n ); (}int main ) ) {LinkList L; init(L; HEAD_insert(L,15; HEAD_insert(L,25; HEAD_insert(L,35; 打印(l ); printf((nm(n ),get ) l,2 )-data ); 返回0; }代码# include stdio.h # include malloc.h//结构体typedef struct LNode {int data; 结构节点*下一步; (} *链接列表; 初始化//voidinit (链接列表l ) ) {L=NULL; //void head _ insert (链接列表l,int x ) )链接列表newp=(链接列表) malloc(sizeof ) lnode ); newP-data=x; newP-next=L; L=newP; //linklistget(linklistl,int k ) if (k1 ) ) {printf“搜索位置错误! ”); 返回空值; (}int i=1; if(L!=NULL i=k ) {L=L-next; I; }if(I==k ) {return L; }printf ('搜索位置不正确!' ); 返回空值; (//遍历输出voidprint(linklistL ) printf ) ) (n ); while(L ) {printf )、L-data ); L=L-next; }printf((n ); (}int main ) ) {LinkList L; init(L; HEAD_insert(L,15; HEAD_insert(L,25; HEAD_insert(L,35; 打印(l ); printf((nm(n ),get ) l,2 )-data ); 返回0; }

第一个节点的操作码# include stdio.h # include malloc.h//结构体typedef struct LNode {int data; 结构节点*下一步; (} *链接列表; //void init (链接列表l )链接列表newp=(链接列表) malloc (sizeof ) lnode ) )初始化; newp-next=NULL; L=newp; //void head _ insert (链接列表l,int x ) )链接列表newp=(链接列表) malloc(sizeof ) lnode ); newp-data=x; newp-next=L-next; L-next=newp; //linklistget(linklistl,int k ) if (k1 ) ) {printf“搜索位置错误! ”); 返回空值; (}int i=1; LinkList p=L-next; if(p!=NULL i=k ) {p=p-next; I; (if ) I==k ) {返回p; }printf ('搜索位置不正确!' ); 返回空值; (//遍历输出voidprint(linklistL ) printf ) ) (n ); LinkList p=L-next; while(p ) {printf )、p-data ); p=p-next; }printf((n ); (}int main ) ) {LinkList L; init(L; HEAD_insert(L,15; HEAD_insert(L,25; HEAD_insert(L,35; 打印(l ); printf((nm(n ),get ) l,2 )-data ); 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。