数据结构线性表-链表实现版本

#include<bits/stdc++.h>
using namespace std;
typedef struct Lnode
{
   int data;//结点数据域
   struct Lnode *next;//结点指针域
}Lnode,*Linlist;//*LinkLisu为指向结构体Lnode的指针类型

int InitList_L(Linlist &L)//初始化链表
{
    L=new Lnode; //new 即动态分配内存后返回头首地址
    L->next=NULL;
    return 0;
}
int ListEMpty(Linlist L)//判空
{
    if(L->next)
        return 0;
    else return 1;
}
int Destroylist(Linlist &L)//删除链表
{
    Lnode *p;
    while(L)
    {
        p=L;
        L=L->next;
        delete p;
    }
}
//将L重置为空表依次释放所有结点,并将头结点指针域设置为空
int ClearList(Linlist &L)
{
    Lnode *p,*q;
    p=L->next;
    while(p)
    {
        q=p->next;
        delete p;
        p=q;
    }
    L->next=NULL;
    return 1;
}
 //求链表表长
int Listlength(Linlist L)
{
    int num=0;
    Linlist p;
    p=L->next;
    while(p)
    {
        num++;
       p=p->next;
    }
    return num;
}
//取值
int getelem(Linlist L,int i,int &e)
{
    Linlist p;
    p=L->next; int j=1;
    while(p&&j<i)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i) return 0;
    e=p->data;
    return 1;
}

 //按值查找
 Lnode *Locateelem(Linlist L,int e)
 {
     Lnode *p= L->next;
     while(p&&p->data!=e)
     {
         p=p->next;
     }
     return p;
 }

 //按值查找返回位置
 int locateelem(Linlist L,int e)
 {
     Linlist p=L->next; int j=1;
    while(p&&p->data!=e)
     {
         p=p->next; j++;
     }
     if(p)return j;
     return 0;
 }
 //插入
 void insertelem(Linlist &L,int i,int e)
 {
     Lnode *tmp=new Lnode;
     tmp->data=e; int j=0;
     Linlist p=L;
     while(p&&j<i-1)
     {
         p=p->next;++j;
     }
     tmp->next=p->next;
     p->next=tmp;
     return ;
 }

 //删除
 void deleteelem(Linlist &L,int i)
 {
     Linlist p=L; int j=0;
     while(p->next&&j<i-1){p=p->next;++j;}
     Linlist q=p->next;
     p->next=p->next->next;
     delete q;
 }
 //头插法 新元素插入链表头部
 void CreateList(Linlist &L,int n)
 {
     L=new Lnode; L->next=NULL;
     cout<<"输入链表数值"<<endl;
      for(int i=n;i>0;i--)
      {
          Lnode *p=new Lnode;
          cin>>p->data;
          p->next=L->next;//插入表头
          L->next=p;
      }
 }

 void print(Linlist L)
 {
     Linlist p=L->next;
     while(p)
     {
         cout<<p->data<<" ";
         p=p->next;
     }
     cout<<endl;
     return ;
 }
int main()
{
   Linlist L;
   InitList_L(L);
   CreateList(L,5);
   print(L);
return  0;
}

posted @ 2022-05-28 23:30  lynko小渣硕  阅读(46)  评论(0)    收藏  举报