2023-03-25单链表linklist的基本操作(代码片段)

DataStruct_Study DataStruct_Study     2023-03-25     561

关键词:

 #include <stdio.h>
 #include <stdbool.h>
 #include <malloc.h>
 typedef struct LNode
 
     int data;
     struct LNode *next;
 LNode,*LinkList;//相当于typedef struct LNode *LinkList;   LinkList a相当于struct LNode a
 
 bool initlist(LinkList L)//初始化单链表
 
     L=NULL;//赋为空表
     return true;
 
 
 LNode *GetElem(LinkList L,int i)//按位查找结点
 
     LNode *p;//存放最后返回的结点
     p=L->next;//先从第一个结点开始遍历
     if(i==0)
     
         return L;//第零个节点是头指针?头结点是第一个结点?
     
     if(i<1)
     
         return NULL;
     
     int j=1;//此时p在第一个结点处
     while(p!=NULL && j<i)
     
         p=p->next;//第一次循环,p遍历到第二个结点
         j++;
     
     return p;//返回p结点
 
 
 LinkList List_HeadInsert(LinkList L)//头插法,最后插入的元素在第一个位置
 
     L = (LNode *)malloc(sizeof(LNode));
     L->next = NULL;//易忽略,头结点插入时要先将最后一个结点的next设为空
     int value;//结点的值即data
     scanf("%d",&value);
     LNode *s;
     while(value!=9999)
     
         s=(LNode *)malloc(sizeof(LNode));//每次都拓展一个LNode大小的内存,并将开头地址强制转换为LNode*类型并赋值给s
         s->data = value;
         s->next = L->next;
         L->next = s;
         scanf("%d",&value);
     
     return L;//返回单链表的头指针
 
 
 LinkList List_TailInsert(LinkList L)//尾插法,在表的末尾进行插入
 
     int value;
     L=(LinkList)malloc(sizeof(LNode));
     LNode *s;//要插入的节点
     LNode *e=L;//表尾的节点
     scanf("%d",&value);
     while(value!=9999)
     
         s=(LNode *)malloc(sizeof(LNode));//为插入节点扩充空间
         s->data=value;
         e->next=s;//此时e为未插入s前,L的表尾,将e的下一个节点指向s
         e=s;//此时s是最后一个节点,所以让e指向s的地址
         scanf("%d",&value);
     
     e->next = NULL;//将下一个节点设为空
     return L;
 
 
 LNode *LocateElem(LinkList L,int e)//按值来查找结点
 
     LNode *s;
     s=L->next;//先将s指向第一个结点来进行判断
     while(s!=NULL && e!=s->data)//如果s为空节点说明该值不存在,直接return 
     
         s=s->next;
     
     return s;
 
 
 void LNode_TailInsert(LinkList L,int i,int e)//后插法(常用),在第i个位置上插入结点,data的值为e
 
     LNode *p=GetElem(L,i-1);//返回第i-1个节点,在GetElem中已经判断过插入位置的合法性
     LNode *s;//插入的节点,(野指针 指向未知变量)
     s=(LNode *)malloc(sizeof(LNode));//为什么不能直接LNode *s,然后进行插入s->data=e,必须要用malloc分配空间吗?->刚开始s指向的是一个未知变量是一个野指针,通过malloc来获取一个LNode大小的内存并让s指针指向他来完成指针的初始化,malloc相当于创建了只有一个元素的数组
     s->next=p->next;
     p->next=s;
     s->data=e;
 
 
 void LNode_HeadInsert(LinkList L,int i,int e)//头插法,转换为后插法进行插入,将data值进行调换即可
 
     LNode *p=GetElem(L,i);
     LNode *s;
     s=(LNode *)malloc(sizeof(LNode));
     s->data=e;
     s->next=p->next;
     p->next=s;
     int temp=p->data;
     p->data=s->data;
     s->data=temp;
 
 
 void DeleteLNode(LinkList L,int i)//删除节点操作
 
     LNode *p;
     p=GetElem(L,i-1);//获取删除节点的前一个节点的地址
     LNode *q;
     q=p->next;//被删除的节点
     p->next=q->next;
     free(q);
 
 
 int LinkList_length(LinkList L)//计算单链表长度
 
     LNode *p;
     p=L->next;
     int sum=0;
     while(p!=NULL)
     
         sum++;
         p=p->next;   
     
     return sum;
 
 
 int main()
 
     LinkList L;//L即头指针
     
     initlist(L);
     //printf("%p",L);//此时输出00400080
     //L = List_HeadInsert(L);//为什么要进行赋值操作,L是指针,函数不是在地址上对其进行修改的吗?->指针发生了改变?L的指向改变了?
     //printf("%p",L);//此时输出00B71988,如果不进行赋值操作,输出的仍然是00400080,指针指向的地址没有改变,L的本质也是个变量,只有地址才是不会变的
     L=List_TailInsert(L);
     //int e;
     //e=GetElem(L,3)->data;
    // LNode *p;
     //p=LocateElem(L,666);
     //printf("%d",p->data);
     //printf("%d",e);
 
     //LNode_HeadInsert(L,3,6666);
 
     //DeleteLNode(L,3);
     printf("%d",LinkList_length(L));
 
     return 0;
 

 

单链表

#include"stdafx.h"#include<malloc.h>typedefcharElemType;typedefstructLNode{ ElemTypedata; structLNode*next;}LinkList;//创建头结点voidInitList(LinkList*&L){ L=(LinkList*)malloc(sizeof(LinkList)); 查看详情

关于数据结构单链表指针*星号的理解

...义节点类型*/typedefstructNode DataTypedata; structNode*next;ListNode,*LinkList;/*将单链表初始化为空*/*/voidInitList(LinkList*head)/*-----这里*headwhy?---*/ if((*head=(LinkList)malloc(sizeof(ListNode)))==NULL) exit(-1); (*head)->next=NULL;/*判断单链表是否为空*/intListEm... 查看详情

02循环单链表

...构*/2structLNode3{4ElemTypedata;5structLNode*next;6};7typedefstructLNode*LinkList;/*另一种定义LinkList的方 查看详情

02单链表

#include<stdio.h>#include<stdlib.h>typedefstructnode{intdata;structnode*next;}linkList;intlinkList_init(linkList**list){(*list)=(linkList*)malloc(sizeof(linkList));if(*list==NULL){return-1 查看详情

数据结构(c语言版)严蔚敏->单链表的定义及合并两个有序单链表(代码片段)

头文件linklist.h#ifndefLINKLIST_H_INCLUDED#defineLINKLIST_H_INCLUDEDtypedefstructLNodeintdata;structLNode*next;LNode,*LinkList;voidInitList_L(LinkList&L);//初始化单链表boolListEmpty_L(LinkListL);//判断单链表是否为空intListLength_L(LinkListL);//获取单链表的长度voidClearL... 查看详情

02单链表

线性表之链式存储---单链表1#include<stdio.h>2#include<stdlib.h>3#include<string.h>45//数据结构6typedefstructnode7{8intdata;9structnode*next;10}linkList;1112//创建单链表,并初始化13linkList*linkList_init(void) 查看详情

数据结构之链表篇(单链表的常见操作)(代码片段)

...长链表插入链表删除打印链表反转链表//链表的定义structlinkListintvalue;linkList*next;;//链表的初始化voidinitList(linkList*L)L=nullptr;//链表的创建(头插入法)linkList*createList()linkList*head=newlinkList;head 查看详情

数据结构(c语言版)严蔚敏->单链表的定义及合并两个有序单链表(代码片段)

头文件linklist.h#ifndefLINKLIST_H_INCLUDED#defineLINKLIST_H_INCLUDEDtypedefstructLNodeintdata;structLNode*next;LNode,*LinkList;voidInitList_L(LinkList&L);//初始化单链表boolListEmpty_L(LinkListL);//判断单链表是否为 查看详情

单链表(代码片段)

定义一个单链表结构typedefstructLNodeElemtypedata;structLNode*next;*Linklist;   初始化链表(尾插法)voidCreatList(Linklist&L)Linklistp,h;cout<<"请输入链表的长度"<<endl;intn;cin>>n;L=(Linkl 查看详情

数据结构作业代码留存(代码片段)

...dlist(数据结构单链表)Date:2021-10-709:26:57Author:FrankWangInitList(LinkList&L)参数:单链表L功能:初始化时间复杂度O(1)ListLength(LinkListL)参数:单链表L功能:获得单链表长度时间复杂度O(n)ListInsert(LinkList&L,inti,ElemTypee)List... 查看详情

考研数据结构-单链表(基本操作)(代码片段)

这次和以往不同,我们先放出全部代码,之后再慢慢分析。#include<stdio.h>#include<malloc.h>#defineElemTypeinttypedefstructLNodestructLNode*next;ElemTypedata;LNode,*LinkList;LinkListCreateLinkListH1(LinkList&L)// 查看详情

考研数据结构之单链代码(代码片段)

...ff09;结构体定义typedefstructLNodeElemTypedata;structLNode*next;LNode,*LinkList;单链表的建立头插法LinkListList_HeadInsert(LinkList&L)LNode*s;ElemTypex;scanf("%d",&x);while(x!=9999)s=(LNode*)malloc(sizeof(LNode));s->data=x;s->next=L->next;L->ne... 查看详情

6.带头结点的单链表操作

#include<stdio.h>#include<stdlib.h>typedefintElemType;typedefstructLNode ElemTypedata; structLNode*next; LNode,*LinkList;boolInitList(LinkList&L) L=(LNode*)malloc(sizeof(LNode)); 查看详情

数据结构单链表

...pedefintDataType;typedefstructnode DataTypedata; structnode*link;LinkNode,*LinkList;voidprintList(LinkNode*first) if(first==NULL)return; printf("%d",first->data); printList(first->link); ;//尾插发建立一个单链表 voidclearListRear(LinkList&last,DataTypeendTag) DataTypeval; print... 查看详情

单链表(代码片段)

单链表,创建单链表函数出了点问题导致程序报错。。1#include"stdio.h"2#include"stdlib.h"3typedefintDataType;4typedefstructnode5DataTypedata;6structnode*link;7LinkNode,*LinkList;8voidinitList(LinkList*first)9(*first)=(LinkNod 查看详情

重新认识线性表的链式存储(单链表)(代码片段)

#include<iostream>usingnamespacestd;#defineStatusint#defineElemTypeinttypedefstructLNodeElemTypedata;structLNode*next;LNode,*LinkList;StatusCreateList_L(LinkList&L,intn)//头插法逆序输出LinkListp 查看详情

单链表

#ifndef_LINKLIST_H_#define_LINKLIST_H_#include<iostream>usingnamespacestd;template<typenameT>structNodeTdata;Node<T>*next;;templat本文来自博客园,作者:wxy214,转载请注明原文链接:https://www.cnblogs.com/ 查看详情

10单链表操作

单链表操作单链表操作1/*单链表的类型定义*/typedefintDataType;typedefstructnode{ DataTypedata; structnode*next;}LinkNode,*LinkList;/*单链表的定位运算*/LinkNode*Locate(LinkNode*L,intk)//????为什么此处是LinkNode*Locate()类型,表示什么意思{ LinkN 查看详情