前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >链式存储

链式存储

原创
作者头像
lascyb
发布2022-01-13 16:09:56
4100
发布2022-01-13 16:09:56
举报
文章被收录于专栏:PHP-轮子制造机PHP-轮子制造机
代码语言:javascript
复制
#define TRUE 1
#define ERROR 0
#define MAX_SIZE 100
#define OK 1
/**链式存储
 * 1、节点:数据域,指针域组成一个节点
 * 2、链表:n个节点由指针链组成一个链表
 * 3、单链表、双链表、循环链表
 *
 * 4、不带头结点
 * 5、带头结点
 * 6、顺序存取
 * */
class LianList{
    typedef struct{
        char num[8];
        char name[8];
        int score;
    } ElemType;

    typedef struct LNode{
        ElemType data;
        struct LNode *next;
    } LNode,*LinkList;
    /**带头结点的单链表
     * 初始化
     */

    int InitList_L(LinkList &L){
        L=new LNode;//或 L=(LinkList) malloc(sizeof(LNode));
        L->next=NULL;
        return OK;
    }
    /**判断链表是否为空
     * 为空返回1
     * 否则返回0
     * */
     int ListEmpty(LinkList L){
        if (L->next)
            return 0;
        else
            return 1;
     }
     /**单链表的销毁
      * 从头指针开始依次释放所有节点
      * */
      int DestroyList_L(LinkList &L){
         LinkList p;
         while (L!=NULL){
             p=L;
             L=L->next;
             delete p;// free(p);
         }
         return OK;
      }
      /**清空单链表
       * 从首元节点开始依次释放所有节点
       * */
      int ClearList_L(LinkList &L){
          LNode *p;
          while (L->next!=NULL) {
              p = L->next;
              L->next = p->next;
              delete p; //free(p);
          }
          return OK;
      }
      /**单链表L的表长
       * */
      int LengthList_L(LinkList L,int &i){
          i=0;
          LNode *p;
          p=L->next;
          while (p){
              i++;
              p=p->next;
          }
          return OK;
      }
      /**取单链表的第i个元素值
       * */
       int GetILNode(LinkList L,int i,ElemType &e){
           LNode *p;
          if (i<1)return ERROR;
           p=L->next;i--;
          while (p!=NULL&&i-->0){
              p=p->next;
          }
          if (i==0&&p!=NULL){
              e=p->data;
              return OK;
          } else{
              return ERROR;
          }
       }
       /**取单链表的第i个元素值
       * */
       int GetILNode2(LinkList L,int i,ElemType &e){
           LNode *p=L->next;
           int j=1;
           while (p&&j++<i){
               p=p->next;
           }
           if (!p||i!=j) return ERROR;
           e=p->data;
           return OK;

       }
       /**按值查找
        * 1.所在位置(物理地址)
        * 1.所在顺序
        * */
        LNode *LocateElem_L(LinkList &L,ElemType e){
            LNode *p;
            p=L->next;
           while (p&&p->data.name!=e.name){
               p=p->next;
           }
           return p;
        }
        /**按值查找
        * 1.所在位置(物理地址)
        * 1.所在顺序
        * */
        int LocateElem1_L(LinkList &L,ElemType e){
            LNode *p;
            p=L->next;
            int i=1;
            while (p&&p->data.name!=e.name){
               p=p->next;
               i++;
           }
            if (p) return i;
            return 0;
        }
        /**插入操作
         * */
         int InsertList_L(LinkList &L,int i,ElemType e){
             LNode *p=L;
             int j=0;
            while (p&&j<i-1){ //找到第i-1 个元素
                p=p->next;
                j++;
            }
            if (!p||i<1)return ERROR;
            LNode *s = new LNode;
            s->data=e;
            s->next=p->next;
            p->next=s;
            return OK;
         }
         /**删除操作
          * */
          int DeleteList_L(LinkList &L,int i,LNode *&e){
              int j=0;
              LNode *p=L;
              while (p->next&&j<i-1){ //找到第i-1个节点p
                  p=p->next;
              }
             if (!p->next||i<1) return ERROR;
             e=p->next;
             p->next=e->next;
             return OK;
          }
        /**建立-头插法   * */
        int CreateList_H(LinkList &L,int n){
           L=new LNode ;
           L->next=NULL;
           for (int i = n; i >0 ; --i) {
               LNode *p=new LNode ;
//                 cin>>p->data;
               p->next=L->next;
               L->next=p;
           }
        }
        /**建立-尾插法
        * */
        int CreateList_E(LinkList &L,int n){
            L=new LNode;
            L->next=NULL;

            LNode *r=L;
            for (int i = n; i > 0; --i) {
                LNode *p=new LNode;
    //                    p->data=value
                    p->next=NULL;
                    r->next=p;
                    r=p;
            }
        }
};

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档