掌握順序表的初始化,初始化、查找、插入、刪除、遍歷、查看實際長度等操作
內容
- 從鍵盤輸入n個整數,創建順序表。【創建長度為n的順序表】
- 從鍵盤輸入1個整數x,在順序表中查找x所在的位置。若找到,輸出該元素所在的位置(即數組下標);若找不到,則顯示“找不到”。【按值查找】
- 從鍵盤輸入2個整數x、i,將元素x插入到第i個元素處,插入操作結束后遍歷順序表,觀察輸出結果。【插入】【遍歷】
- 從鍵盤輸入1個整數i,表示刪除第i個元素,刪除操作結束后遍歷順序表,觀察輸出結果。【刪除】
- 從鍵盤輸入1個整數x,刪除找到的第一個值等于x的元素,刪除操作結束后遍歷順序表,觀察輸出結果。【按值查找】【刪除】
- 查看當前順序表的長度。【求順序表的長度】
完整代碼
#include<iostream>
#include <stdlib.h>
using namespace std;#define MAX 20
#define datatype inttypedef struct seqList
{datatype data[MAX];int last;
}SeqList;
//初始化
SeqList *Init()
{SeqList *L;L=(SeqList *)malloc(sizeof(SeqList));L->last=-1;return L;
}
//添加
void Add(SeqList *L)
{int a;cout<<"請輸入需要添加的個數:" ;cin>> a;datatype arr[a];//保存要添加的值cout<<"請輸入需要添加的值:" ;for(int i=0;i<a;i++){cin>>arr[i];}for(int i=0;i<a;i++){L->data[i]=arr[i];L->last++;//cout<<L->data[i];}} //顯示,遍歷void Output(SeqList *L) {if(L->last!=-1){cout<<"遍歷:"<<endl;for(int i=0;i<=L->last;i++){cout<<L->data[i]<<" ";}cout<<endl;}else cout<<"空表,無數據!"; }//插入
int Insert(SeqList *L)
{int i;datatype x;cout<<"輸入x,i,元素x插入到第i個元素處: ";cin>>x>>i;int j;if(L->last==MAX-1){cout<<"表滿";return (-1);}if(i<1||i>L->last+2){cout<<"位置錯";return (0); }for(j=L->last;j>=i-1;j--){L->data[j+1]=L->data[j];//節點移動,沒有這行會越界,之前位置的節點會消失 }L->data[i-1]=x;L->last++;return(1);
}//刪除
int Delete(SeqList *L)
{int i;cout<<"輸入i,刪除第i個元素:";cin>>i;int j;if(i<1||i>L->last+1){cout<<"不存在第i個元素";return (0); }for(j=i;j<=L->last;j++){L->data[j-1]=L->data[j];//移動 }L->last--;return (1);} //查找刪除
int Location_dete(SeqList *L)
{datatype x;
int i=0;cout<<"輸入x,刪除第一個值為x的元素:";cin>>x;while(i<=L->last&&L->data[i]!=x){i++;if(i<=L->last&&L->data[i]==x){for(i;i<=L->last;i++){L->data[i]=L->data[i+1];}L->last--;return (1);}else if(i>L->last)//最好加條件,不然刪除最后一個的時候會找不到直接跳進這個里 {cout<<"沒有此元素!"<<endl;return (-1);}} } void Length(SeqList *L){cout << "順序表的長度為:"<<L->last+1;//下標從0開始所以要加1 } int main()
{SeqList *LA;LA=Init();Add(LA);Output(LA);Insert(LA);Output(LA);Delete(LA);Output(LA);Location_dete(LA);Output(LA);Length(LA);return 0;
}
運行結果