单链表的表示和实现

来源:互联网 发布:淘宝拍a发b教程 编辑:程序博客网 时间:2024/05/22 10:19
线性表的链式表示和实现**线性链表的结点包含数据域和指针域两部分****头指针表示整个链表,链表名即头指针;链表类型即头指针类型***线性链表定义***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;      }}

原创粉丝点击