单链表的表示和实现

线性表的链式表示和实现

**线性链表的结点包含数据域和指针域两部分**
**头指针表示整个链表,链表名即头指针;链表类型即头指针类型

***线性链表定义***
typedef ??? ElemType;
typedef struct LNode{
      ElemType data;//数据域
      struct LNode *next;//指针域
}LNode,*LinkList;
LNode node2;//定义一个结点node2;
LinkList La;//定义一个链表La;
LNode *p;//定义一个普通指针变量p;

*****单链表******
优点:空间利用好,插入删除不需要移动数据,表头操作快
缺点——不能随机访问,求前驱,表长慢
附加头结点:为使空表和非空表操作统一,在链表最前附设一个额外的头结点。
默认链表均带头结点

Status GetEle_L(LinkList L,int i,ElemType &e)
{
      //L为带头结点元素的头指针
      //第i个元素存在时,其值付给e并返回,否则返回ERROR;
      LNode *p = L;//P指向第0个元素结点
      int j = 0;//J是该结点的位序
      while(p&&j<i)
      {
            p=p->next; ++j;
      }
      if(!p||i<1)  return ERROR;
      e=p->data;
      return OK;
      
}

**插入**
Status ListInsert_L(LinkList &L,int i,ElemType e)
{
      LNode *P = L; int j = 0;
      //定位到第i-1个结点,在其后插入一个新开辟的结点
      while(p&&j<i-1)
      {
        p=p->next; ++j;
      }
      if(!p||i<1)  return ERROR;
      LNode *q = new LNode;
      if(!q)  exit(OVERFLOW);
      q->data = e;
      q->next = p->next;
      p->next = q;
      return OK;
      
}

**删除**
Status ListDelete_L(LinkList &L,int i,ElemType &e)
{
      LNode *p = L;
      int j=0;
      if(!p||i<1) return ERROR;
      while(p&&j<i-1)
      {
            p = P->next; ++j;
      }
      q = p->next;
      e= q->data;
      p->next = q->next;
      free(q);
      return OK;
}

**逆位序创建含n个结点的链表**
Status ListCreate_L(LinkList &L,int n)
{
      LNode *p;
      L = (LNode *)malloc(sizeof(LNode));
      L->next = NULL;
      for(int i=1;i<=n;++i)
      {
          p=(LNode *p)malloc(sizeof(LNode));
          InputElem(p->data);
          p->next = L->next;
          L->next = p;
      }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值