单链表基本操作实现

本文展示了如何使用C++实现单链表的基本操作,包括初始化链表、创建链表、获取链表长度、在指定位置插入元素、删除指定元素、查找元素、输出链表以及判断链表是否为空。代码还包含了测试用例来验证这些功能。
摘要由CSDN通过智能技术生成

单链表基本操作实现

#include<iostream>
#include<stdlib.h>
using namespace std;
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef int Statue;
typedef struct LNode{
    ElemType data;
    struct LNode*next;
} LinkList; 

//初始化链表
LinkList*InitLinkList(LinkList*L)
{
    L=(LinkList*)malloc(sizeof(LinkList));
    L->next=NULL;
    return L; 
 } 
//创建链表
LinkList*CreatList(int len)
{ int i;ElemType e;
   LinkList*L=InitLinkList(L);
   LinkList*R=L; 
   for(i=1;i<=len;i++)
   { LinkList*S=(LinkList*)malloc(sizeof(LinkList));
         cin>>e;
         S->data=e;
         R->next=S; 
         R=S;
   }
   R->next=NULL;
   return L;    
 } 

//求链表长度
int GetLen(LinkList*L)
{ int i=1;
LinkList*R=L->next;
while(R!=NULL)
{ i++;
  R=R->next;
}
return i;    
 } 

//将元素插入指定位置
Statue InsertList(LinkList*L,int i,ElemType e)
{ int j;
 if(i>GetLen(L)+1||i<1)return ERROR;
LinkList*R=L->next,*S=InitLinkList(S);
S->data=e;
for(j=1;j<=i-2;j++)
  R=R->next;
  S->next=R->next;
   R->next=S;
   return OK;    
}
 
//删除指定元素 
Statue DeleteList(LinkList*L,int i,ElemType*e)
{
    if(i<1||i>GetLen(L))return ERROR;
    LinkList*R=L->next,*p;
    while(--i>1)
    R=R->next;
    p=R->next;
    *e=p->data;
    R->next=p->next;
    free(p);
    return OK;     
}

//查找指定元素
int SearchList(LinkList*L,ElemType e)
{
    LinkList*R=L->next;
    int i=0;
    while(++i<=GetLen(L))
    {
        if(R->data==e)
        {
            return i;
            break;
        }
        R=R->next;
    }
    if (i>GetLen(L))
    return ERROR;
 } 
 
 //输出俩是链表
 void PrintList(LinkList*L)
{  LinkList*R=L->next;
cout<<"head";
     for(int i=1;i<GetLen(L);i++)
  {
  cout<<"-->"<<R->data;
   R=R->next;
    }
    cout<<"-->end"<<endl;
}

//判断是否为空链表
Statue IsEmpty(LinkList*L)
{
    return(!L->next);
 } 
 
//摧毁链表
void DestoryList(LinkList*L)
{
    free(L);
 } 
 
 
 //运行测试 
 int main(void)
 {ElemType*e,a=3;e=&a;
  LinkList*L=CreatList(10);
   PrintList(L);
   cout<<SearchList(L,5)<<endl;
      DeleteList(L,3,e);
    PrintList(L);
    InsertList(L,6,520);
     PrintList(L);
     cout<<GetLen(L)<<endl;
 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值