c++實現線性表中的順序表(數據結構課程作業)


一、題目簡介

實現順序表的創建、初始化、賦值、插入、刪除、按數據查找元素位置、按元素位置查找數據、清空、刪除

的操作,以上操作用可用菜單選項完成

二、源程序代碼

 

#include<iostream>
#define MAXSIZE 100
using namespace std;
   typedef int ElemType;
   typedef struct List
   {
      ElemType *elem;
      int length;
   }Sqlist;
   void InitList(Sqlist &L);
   void DestroyList(Sqlist &L);
   void ClearList(Sqlist &L);
   void GetLength(Sqlist L);
   void isEmpty(Sqlist L);
   void Getelem(Sqlist &L,int i);
   void Locateelem(Sqlist &L,ElemType e);
   void ListInsert(Sqlist &L,int i,ElemType e);
   void ListDelete(Sqlist &L,int i);
   void fuzhi(Sqlist &L);
   void print(Sqlist &L);
   void mainscreen();
   int main()
   {
     mainscreen();
     return 0;
   }
  void InitList(Sqlist &L)
   {
    L.elem=new ElemType[MAXSIZE];
    if(!L.elem){
       cout<<"內存空間分配失敗"<<endl;
    }
    L.length=0;
      cout<<"順序表初始化成功"<<endl;
   }
   void mainscreen()
  {
    int flag=0;
    while(flag==0)
    {
    cout<<"請選擇對順序表的操作"<<endl;
    cout<<"\t1 初始化順序表"<<endl;
    cout<<"\t2 給順序表賦值"<<endl;
    cout<<"\t3 向順序表中插入數據元素"<<endl;
    cout<<"\t4 向順序表中刪除數據元素"<<endl;
    cout<<"\t5 清空順序表"<<endl;
    cout<<"\t6 刪除順序表"<<endl;
    cout<<"\t7 根據數據元素查詢在順序表中位置"<<endl;
    cout<<"\t8 根據在順序表中位置查詢數據元素"<<endl;
    cout<<"\t9 查詢順序表長度"<<endl;
    cout<<"\t10 輸出順序表"<<endl;
    cout<<"\t11 退出操作"<<endl;
    int s;
    cin>>s;
    if(1<=s<=10)
    {
    switch(s)
    {
        case 1:
        Sqlist L;
        InitList(L);
        break;
        case 2:
        fuzhi(L);
        break;
        case 3:
        int a;
        ElemType e;
        cout<<"請輸入你要插入的數據元素位置"<<endl;
        cin>>a;
        cout<<"請輸入你要插入的數據元素"<<endl;
        cin>>e;
        ListInsert(L,a,e);
        break;
        case 4:
        int b;
        cout<<"請輸入你要刪除的數據元素位置"<<endl;
        cin>>b;
        ListDelete(L,b);
        break;
        case 5:
        ClearList(L);
        break;
        case 6:
        DestroyList(L);
        break;
        case 7:
        ElemType f;
        cout<<"請輸入你要查找的數據元素"<<endl;
        cin>>f;
        Locateelem(L,f);
        break;
        case 8:
        int c;
        cout<<"請輸入你要查找的數據元素的位置"<<endl;
        cin>>c;
        Getelem(L,c);
        break;
        case 9:
        GetLength(L);
        break;
        case 10:
        print(L);
        break;
        case 11:
        flag=1;
        cout<<"已成功退出對順序表的操作"<<endl;
        exit(0);
        break;
    }
    }
    }
  }
   void DestroyList(Sqlist &L)
   {
       if(L.elem)
       {
       delete[] L.elem;
       cout<<"順序表刪除成功"<<endl;
       }
       else{
            cout<<"順序表刪除失敗"<<endl;
       }
   }
   void ClearList(Sqlist &L)
   {
      L.length=0;
      cout<<"順序表清空成功"<<endl;
   }
   void GetLength(Sqlist L)
   {
       cout<<"順序表中有"<<L.length<<"個元素"<<endl;
   }
   void isEmpty(Sqlist L)
   {
     if(L.length==0)
     cout<<"順序表為空"<<endl;
     else
     cout<<"順序表不為空"<<endl;
   }
    void Getelem(Sqlist &L,int i)
    {
        ElemType e;
        if(i<1||i>L.length){
        cout<<"輸入的查找參數錯誤"<<endl;
        }
        else{
           e=L.elem[i-1];
           cout<<"查找成功"<<endl;
           cout<<"順序表中第"<<i<<"個數據元素是"<<e<<endl;
        }
    }
    void Locateelem(Sqlist &L,ElemType e)
    {
        int i=0;
        int flag=0;
        for(i=0;i<L.length;i++)
        {
            if(L.elem[i]==e){
            cout<<"查找成功"<<endl;
            cout<<e<<"位於順序表中第"<<i+1<<"個數據元素"<<endl;
            flag=1;
            }
        }
            if(flag==0)
            cout<<"查找失敗"<<endl;
    }
   void ListInsert(Sqlist &L,int i,ElemType e)
   {
       int j=0;
       if(i<1||i>L.length)
       {
        cout<<"輸入的查找參數錯誤"<<endl;
       }
       if(L.length==MAXSIZE)
       {
          cout<<"當前儲存空間已滿,無法插入"<<endl;
       }
       for(j=L.length-1;j>=i-1;j--)
       {
         L.elem[j+1]=L.elem[j];
       }
         L.elem[i-1]=e;
        ++L.length;
       cout<<"插入順序表中第"<<i<<"個數據元素成功"<<endl;
   }
  void ListDelete(Sqlist &L,int i)
  {
        int j=0;
       if(i<1||i>L.length)
       {
           cout<<"輸入的查找參數錯誤"<<endl;
       }
       for(j=i;j<=L.length-1;j++)
       {
           L.elem[j-1]=L.elem[j];
       }
        --L.length;
      cout<<"刪除順序表中第"<<i<<"個數據元素成功"<<endl;
  }
  void fuzhi(Sqlist &L)
  {
      int n,m;
      cout<<"請輸入賦值的數據元素個數"<<endl;
      cin>>n;
    for(int i=0;i<n;i++)
    {
    cout<<"請輸入第"<<i+1<<"的數據元素的值"<<endl;
    cin>>m;
    L.elem[i]=m;
    L.length++;
    }
    cout<<"賦值成功"<<endl;
  }
  void print(Sqlist &L)
  {
    for(int i=0;i<L.length;i++)
    {
       cout<<""<<i+1<<"的數據元素的值:";
       cout<<L.elem[i]<<endl;
    }
    cout<<"順序表輸出完成"<<endl;
  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM