zoukankan      html  css  js  c++  java
  • 链式表的实现

    #include<iostream>
    using namespace std;
    #include<string>
    typedef int Status;
    #define OK 1
    #define ERROR 0
    #define ElemType int
    typedef struct  LNode
    {
          ElemType   data;  // 数据域
          struct LNode   *next;  // 指针域
     } LNode, *LinkList;  
    
    
    Status InitList_L(LinkList &L){ 
       L=new LNode;                        
       L->next=NULL;
       return OK; 
    } 
    
    Status DestroyList_L(LinkList &L){
        LinkList p;
           while(L)
            {
                p=L;  
                L=L->next;
                delete p;  
            }
         return OK;
     }
    
    Status ClearList(LinkList & L){
      // 将L重置为空表 
       LinkList p,q;
       p=L->next;   //p指向第一个结点
       while(p)       //没到表尾 
          {  q=p->next; delete p;     p=q;   }
       L->next=NULL;   //头结点指针域为空 
       return OK;
     }
    
    
    int  ListLength_L(LinkList L){
    //返回L中数据元素个数
        LinkList p;
        p=L->next;         //p指向第一个结点
         int i=0;             
         while(p){           //遍历单链表,统计结点数
               i++;
               p=p->next;    } 
        return i;                             
     }
    
    
    int ListEmpty(LinkList L){ 
    //若L为空表,则返回1,否则返回0 
       if(L->next)   //非空 
         return 0;
       else
         return 1;
    }
    
    
    
    Status GetElem_L(LinkList L,int i,ElemType &e){ 
        LinkList p=L;
        p=L->next;   
        int j=1; //初始化
         while(p&&j<i){    //向后扫描,直到p指向第i个元素或p为空 
           p=p->next; ++j; 
         } 
         if(!p || j>i)return ERROR; //第i个元素不存在 
         e=p->data; //取第i个元素 
         return OK; 
    }
    
    
    
    LNode *LocateElem(LinkList L,ElemType e)
    {
        LNode *p=L;
        while(p&&(p->data!=e))
        {
            p=p->next;
        }
        return p;
    }
    
    
    
    Status ListInsert_L(LinkList &L,int i,ElemType e){ 
          LinkList p;
          LNode* s;
          p=L;
          int j=0; 
          while(p&&j<i-1){p=p->next;++j;}    //寻找第i−1个结点 
          if(!p||j>i-1)return ERROR;    //i大于表长 + 1或者小于1  
          s=new LNode;            //生成新结点s 
          s->data=e;                         //将结点s的数据域置为e 
          s->next=p->next;                     //将结点s插入L中 
          p->next=s; 
          return OK; 
    }
    
    
    
     Status ListDelete_L(LinkList &L,int i,ElemType &e){
        LinkList p;
        LinkList q;
        p=L;int j=0; 
        while(p->next &&j<i-1){//寻找第i-1个结点,并令p指向其前驱 
            p=p->next; ++j; 
        } 
        if(!(p->next)||j>i-1) return ERROR; //删除位置不合理 
        q=p->next; //临时保存被删结点的地址以备释放 
        p->next=q->next;     //改变删除结点前驱结点的指针域 
        e=q->data;     //保存删除结点的数据域 
        delete q;     //释放删除结点的空间 
     return OK; 
    }
     //遍历输出函数
    void PrintList(LinkList L)
    {
        LinkList p=L->next;//跳过头结点
        if(ListLength_L(L))
        {
            printf("当前单链表所有元素:");
            while(p)
            {
                printf("%d ",p->data);
                p=p->next;
            }
            printf("
    ");
        }
        else
        {
            printf("当前单链表已空!
    ");
        }
    }
    
     int main()
     {
         int i;
          LinkList L;int mount;
          ElemType e=0;
          InitList_L(L);
          for(;;)
          {
              cout<<"遍历0,查询请输入1,查找输入2,插入输入3,删除输入4,退出输入5"<<endl;
              cin>>mount;
              switch(mount)
              {
              case 0:
                   PrintList(L);
                   break;
              case 1:
                  cout<<"请输入你想获取第几个的数据"<<endl;
                  cin>>i;
                  GetElem_L(L,i,e);
                  cout<<"其数据为:"<<e;break;
              case 2:
                  cout<<"请输入你想查找的数据"<<endl;
                  cin>>e;
                  if(LocateElem(L,e)!=NULL)
                  {
                     cout<<"该数在第"<<LocateElem(L,e)<<"个"<<endl;
                  }
                  break;
              case 3:
                  cout<<"请输入你想要插入到第几个位置"<<endl;
                  cin>>i;
                  cout<<"输入插入的数值为:";
                  cin>>e;
                  ListInsert_L(L,i,e);
                  break;
             case 4:
                  cout<<"请输入你想删除第几个数据"<<endl;
                  cin>>i;
                  ListDelete_L(L,i,e);
                  cout<<"删除的数据为"<<e<<endl;
                  break;
              }
        if(mount==5)
            break;
          }
        
     }
  • 相关阅读:
    ASP.NET Core 中文文档 第四章 MVC(3.2)Razor 语法参考
    ASP.NET Core 中文文档 第四章 MVC(3.1)视图概述
    ASP.NET Core 中文文档 第四章 MVC(2.3)格式化响应数据
    ASP.NET Core 中文文档 第四章 MVC(2.2)模型验证
    ASP.NET Core 中文文档 第四章 MVC(2.1)模型绑定
    ASP.NET Core 中文文档 第四章 MVC(01)ASP.NET Core MVC 概览
    mysql 解除正在死锁的状态
    基于原生JS的jsonp方法的实现
    HTML 如何显示英文单、双引号
    win2008 r2 服务器php+mysql+sqlserver2008运行环境配置(从安装、优化、安全等)
  • 原文地址:https://www.cnblogs.com/feng747/p/13765251.html
Copyright © 2011-2022 走看看