数据结构—线性表-单链表

单链表的基本操作:

#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
    int data;
     struct Lnode *next;//结构体的指针 
}*LinkList; 

LinkList InitList(LinkList &L);
bool ScanfData(LinkList &L,int data);
bool DeletData(LinkList &L);
int LengthS(LinkList &L);
LinkList LookSLoc(LinkList &L,int i);
bool LinkInsert(LinkList &L,int i,int e);
bool DeleyData(LinkList &L,int i,int e);
LinkList first;
int main(){
    first=InitList(first);
    LinkList TempP;
    TempP=first;
    ScanfData(first,12);
    ScanfData(first,13);
    ScanfData(first,31232);
    ScanfData(first,1);
    ScanfData(first,232);
    ScanfData(first,56);
    
    while(TempP->next!=NULL){
        TempP=TempP->next;
        printf("%d\n",TempP->data);
    }
    DeletData(first);
    TempP=first;
    while(TempP->next!=NULL){
        TempP=TempP->next;
        printf("%d\n",TempP->data);
    }
    printf("链表的长度为:%d\n",LengthS(first));
    
    LinkList LookFinData;
    LookFinData=LookSLoc(first,3);
    printf("寻找到的节点的数值为:%d\n",LookFinData->data);
    
    LinkInsert(first,3,245);
    LinkInsert(first,3,245);
    LinkInsert(first,3,245);
    LinkList TempA;
    TempA=first; 
    while(TempA->next!=NULL){
        TempA=TempA->next;
        printf("插入数据之后为:%d\n",TempA->data);
    }
    DeleyData(first,3,245);
    TempA=first; 
    while(TempA->next!=NULL){
        TempA=TempA->next;
        printf("删除数据之后为:%d\n",TempA->data);
    }
    return 0;
}
//fun:创建头结点 
//brief:@头结点的地址
//return:头结点 
LinkList InitList(LinkList &L){
    L = (LinkList)malloc(sizeof(Lnode));
    L->data=0;
    L->next=NULL;
    return L;

//fun:在链表的末端添加一个元素
//brief:@ 头结点@插入的数值
//return: ture
bool ScanfData(LinkList &L,int data){
    LinkList TempP,TempPInc;
    TempP=L;//头结点不变 
    //将临时指针的变量移到最后一个节点的位置 
    while(TempP->next!=NULL){
        TempP=TempP->next;
    }
    //新的节点 
    TempPInc=(LinkList)malloc(sizeof(Lnode));//申请大的空间节点
    TempPInc->data=data;
    TempPInc->next=NULL;
    //将新申请的节点接入 
    TempP->next=TempPInc;
    L->data++;
    return true; 
}
//fun:在链表的末端删除一个节点
//brief:@链表
//return:true
bool DeletData(LinkList &L){
    LinkList TempP=L; 
    LinkList TempM;
    while(TempP->next!=NULL){
        TempM=TempP;
        TempP=TempP->next;
    }
    
    free(TempP);
    
    TempM->next=NULL;
    return true;

//fun:求链表的长度
//brief:@链表
//return:长度 
int LengthS(LinkList &L){
    int len=0;
    LinkList TempP=L;
    while(TempP->next!=NULL){
        len++;
        TempP=TempP->next; 
    }
    return len;

//fun:按照序号找一个节点
//brief:@链表@序号
//return:找到的这个节点
LinkList LookSLoc(LinkList &L,int i){
    LinkList TempP=L;
    int j=0;
    while((TempP->next!=NULL)&&(j<i)){
        j++;
        TempP=TempP->next;
    }
    return TempP;
}
//在链表中间插入一个 
//brief:@链表@插入的位置@插入的值
//return:true
bool LinkInsert(LinkList &L,int i,int e){
    
    LinkList TempS;
    TempS=L;
    LinkList TempM;
    for(int j=0;j<i;j++){
        TempS=TempS->next;
        printf("fasd");
    }
    if(TempS==NULL){
        return false;
    }
    TempM=(LinkList)malloc(sizeof(Lnode));
    TempM->data=e;
    TempM->next=TempS->next;
    TempS->next=TempM;
    L->data++;
    return true;

//fun:删除节点的操作
//brief:@链表@删除的位置@删除的值
//return:true
bool DeleyData(LinkList &L,int i,int e){
    LinkList TempP,TempM;
    TempP=L;
    for(int j=0;(j<i-1)&&(TempP!=NULL);j++){
        TempP=TempP->next;
    }
    if((TempP==NULL)||(TempP->next==NULL)){//链表中没有元素 
 
        return false; 
    }
    TempP->next=TempP->next->next;
    
    free(TempP);
    L->data--;
    return true;

//头插发插入数值
//brief@链表@数值
//return:链表
LinkList HeadInsert(LinkList &L,int e){
    LinkList TempP,TempM;
    TempP=L;
    TempM=(LinkList)malloc(sizeof(Lnode));
    printf("读入要插入的数值:%d\n");
    TempM->data=e;
    if(TempP->next==NULL){
        TempM->next=NULL;
    }
    else{
        TempM->next=TempP->next;
        TempP->next=TempM;
    }
}

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值