順序鏈表(C++)


順序表結構

struct Sq_list 
{
    int elem[Max_size+1];
    int length;
};

 

 創建並初始化順序表

int Init_list(Sq_list *L)
{
    L->length = 0;
    return 0;
}

 按序插入元素

int insert (Sq_list *L)
{
    int n;
    cout << "請輸入順序表的長度:" << endl;
    cin >> n;
    cout << "請輸入元素:" << endl;
    for (int i = 1; i <= n; i++)
    {
        int data;
        cin >> data;
        L->elem[i] = data;
        L->length++;
    }
    return 0;
}

在指定位置插入元素

int Insert_elem(Sq_list *L)
{
    int cor,elem;
    cout << "請輸入指定位置的元素:" << endl;
    cin >> cor;
    cin >> elem;
    if (cor<1 || cor>L->length+1)
    {
        cout << "輸入的位置不在順序鏈表內!" << endl;
    }
    else
    {
        for (int i = L->length; i >= cor; i--)
        {
            L->elem[i+1] = L->elem[i];
        }
        L->elem[cor] = elem;
        L->length++;
    }
    return 0;
}

刪除元素

刪除指定值元素

int Delete(Sq_list *L)
{
    int data;
    cout << "請輸入要刪除的元素值:" << endl;
    cin >> data;
    int length = L->length;//存放表的原長
    for (int i = 1; i <= L->length; i++)
    {
        if (L->elem[i] == data)
        {
                for (int j = i; j < L->length; j++)
                {
                    L->elem[j] = L->elem[j + 1];
                }
                i--;
                L->length--;
        }
    }
    if (L->length == length)//判斷表長是否發生改變
    {
        cout << "您想要刪除的元素不在本鏈表中" << endl;
    }
    return 0;
}

刪除指定位置的元素

int Delete2(Sq_list *L)
{
    int length;
    cout << "請輸入要刪除元素的位置:" << endl;
    cin >> length;
    if (length<1 || length>L->length)
    {
        cout << "您輸入的位置不在本表中" << endl;
    }
    else
    {
        for (int i = length; i <= L->length; i++)
        {
            L->elem[i] = L->elem[i + 1];
        }
        L->length--;
    }
    return 0;
}

查找

按值查找

int seek_elem(Sq_list *L)
{
    int elem2;
    bool check = false;//用於判斷表中是否有該元素    
    cout << "請輸入您要查找的值:" << endl;
    cin >> elem2;
    cout << "您所查元素的位置為" << ' ';
    for (int i = 1; i <= L->length; i++)
    {
        if (L->elem[i] == elem2)
        {
            cout << i << ' ';
            check = true;
        }
    }
    cout << '\n';
    if (check == false)
    {
        cout << "表中沒有您需要查找的元素" << endl;
    }
    return 0;
}

按位置查找

int seek_length(Sq_list *L)
{
    int length2;
    cout << "請輸入您要查找的位置:" << endl;
    cin >> length2;
    if (length2 < 1 || length2 > L->length)
    {
        cout << "您輸入的位置不在本表中" << endl;
    }
    else
    {
        cout << "您所查找位置的元素為 " << L->elem[length2] << endl;
    }
    return 0;
}

遍歷一遍順序表

int show(Sq_list *L)
{
    cout << "遍歷一遍當前數據表" << endl;
    for (int i = 1; i < L->length; i++)
    {
        cout << L->elem[i] <<' ';
    }
    cout << L->elem[L->length] << ' ' << endl;
    return 0;
}

完整代碼

//注:主函數沒寫,自行調用功能函數即可測試,"stdafx.h"為vs編譯器必須,其他可忽視
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#define Max_size 1000
using namespace std;
//順序表結構
struct Sq_list 
{
    int elem[Max_size+1];
    int length;
};
//創建並初始化順序表
int Init_list(Sq_list *L)
{
    L->length = 0;
    return 0;
}
//按序插入元素
int insert (Sq_list *L)
{
    int n;
    cout << "請輸入順序表的長度:" << endl;
    cin >> n;
    cout << "請輸入元素:" << endl;
    for (int i = 1; i <= n; i++)
    {
        int data;
        cin >> data;
        L->elem[i] = data;
        L->length++;
    }
    return 0;
}
//在指定位置插入元素
int Insert_elem(Sq_list *L)
{
    int cor,elem;
    cout << "請輸入指定位置的元素:" << endl;
    cin >> cor;
    cin >> elem;
    if (cor<1 || cor>L->length+1)
    {
        cout << "輸入的位置不在順序鏈表內!" << endl;
    }
    else
    {
        for (int i = L->length; i >= cor; i--)
        {
            L->elem[i+1] = L->elem[i];
        }
        L->elem[cor] = elem;
        L->length++;
    }
    return 0;
}
//刪除指定值元素
int Delete(Sq_list *L)
{
    int data;
    cout << "請輸入要刪除的元素值:" << endl;
    cin >> data;
    int length = L->length;//存放表的原長
    for (int i = 1; i <= L->length; i++)
    {
        if (L->elem[i] == data)
        {
                for (int j = i; j < L->length; j++)
                {
                    L->elem[j] = L->elem[j + 1];
                }
                i--;
                L->length--;
        }
    }
    if (L->length == length)//判斷表長是否發生改變
    {
        cout << "您想要刪除的元素不在本鏈表中" << endl;
    }
    return 0;
}
//刪除指定位置的元素
int Delete2(Sq_list *L)
{
    int length;
    cout << "請輸入要刪除元素的位置:" << endl;
    cin >> length;
    if (length<1 || length>L->length)
    {
        cout << "您輸入的位置不在本表中" << endl;
    }
    else
    {
        for (int i = length; i <= L->length; i++)
        {
            L->elem[i] = L->elem[i + 1];
        }
        L->length--;
    }
    return 0;
}
//按值查找
int seek_elem(Sq_list *L)
{
    int elem2;
    bool check = false;//用於判斷表中是否有該元素    
    cout << "請輸入您要查找的值:" << endl;
    cin >> elem2;
    cout << "您所查元素的位置為" << ' ';
    for (int i = 1; i <= L->length; i++)
    {
        if (L->elem[i] == elem2)
        {
            cout << i << ' ';
            check = true;
        }
    }
    cout << '\n';
    if (check == false)
    {
        cout << "表中沒有您需要查找的元素" << endl;
    }
    return 0;
}
//按位置查找
int seek_length(Sq_list *L)
{
    int length2;
    cout << "請輸入您要查找的位置:" << endl;
    cin >> length2;
    if (length2 < 1 || length2 > L->length)
    {
        cout << "您輸入的位置不在本表中" << endl;
    }
    else
    {
        cout << "您所查找位置的元素為 " << L->elem[length2] << endl;
    }
    return 0;
}
//遍歷順序表
int show(Sq_list *L)
{
    cout << "遍歷一遍當前數據表" << endl;
    for (int i = 1; i < L->length; i++)
    {
        cout << L->elem[i] <<' ';
    }
    cout << L->elem[L->length] << ' ' << endl;
    return 0;
}

 

覺得文章不錯,可以點個贊和關注喲.

 


免責聲明!

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



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