自己寫的順序表的基本操作,插入、刪除、修改,給出完整程式碼,其中運用到goto語句
using namespace std;
#define MAXSIZE 100
typedef int DataType;
typedef struct
{
DataType data[MAXSIZE]; //通常用一位陣列來描述順序表的資料儲存
int SeqLength; /*線性表長度*/
} SeqList;
SeqList *Init_SeqList()//順序表的初始化演算法,將順序表清空
{
SeqList *L;
L = new SeqList;
L->SeqLength = 0; /*長度置為-1*/
return L;
}
void Define_SeqList(SeqList *L)//順序表的定義演算法
{
cout << "請輸入順序表的長度:" << endl;
int n;
cin >> n;
cout << "請依次輸入順序表中要儲存的元素:" << endl;
for (int i = 0; i<n; i++)
{
cin >> L->data[i]; //輸入陣列元素
L->SeqLength++;
}
}
void Display_SeqList(SeqList *L)//順序表的輸出演算法
{
cout << "順序表中儲存的元素為" << endl;
int i;
for (i = 0; i < L->SeqLength; i++)
{
cout << L->data[i] << " ";
}
cout << endl;
}
void GetData_SeqList(SeqList *L)//按照序號查詢元素
{
flag://flag1
cout << "你想尋找第幾個元素?";
int i;
cin >> i;
if (i > L->SeqLength)
{
cout << "超出順序表的長度!請重新輸入!"<<endl;
goto flag;//flag1
}
cout << "第"<<i<<"個元素是:";
cout << L->data[i - 1]<<endl;
}
void GetNumber_SeqList(SeqList *L)//輸出指定元素的序號
{
cout << "輸入你想尋找的元素:" << endl;
int n;
int i = 0;
cin >> n;
while (n!=L->data[i]&&i<=L->SeqLength-1)
{
i++;
}
if (i<L->SeqLength - 1)
cout << "你想尋找的元素" << n << "在順序表中第" << i + 1 << "位" << endl;
else if (n != L->data[i])
{
cout << "你想尋找的元素不在順序表中" << endl;
}
}
void Insert_SeqList(SeqList *L)//插入元素到指定位置
{
int n, m;
flag://flag2
cout << "輸入你想插入的位置"<<endl;
cin >> m;
if (m > L->SeqLength+1||m<1)//首先判斷插入位置是否合法
{
cout << "不在順序表範圍內!請重新選擇位置!";
goto flag;//flag2
}
cout << "輸入你想插入的元素" << endl;
cin >> n;
if (m == L->SeqLength+1)
{
L->SeqLength++;
L->data[m-1] = n;
}
else
{
for (int i = L->SeqLength - 1; i > m - 2; i--)
L->data[i + 1] = L->data[i];
L->data[m-1] =n ;
L->SeqLength++;
}
}
void Delete_SeqList(SeqList *L)//刪除指定序號的元素
{
flag://flag3
cout << "輸入你想刪除第幾個元素"<<endl;
int n;
cin >> n;
if (n<1 || n>L->SeqLength)
{
cout << "超出順序表範圍,請重新選擇" << endl;
goto flag;//flag3
}
if (n == L->SeqLength)
{
L->data[n - 1] = 0;
L->SeqLength--;
}
else
{
for (int i = n - 1; i < L->SeqLength;i++)
L->data[i] = L->data[i + 1];
L->data[L->SeqLength-1] = 0;
L->SeqLength--;
}
}
void Updata_SeqList(SeqList *L)//修改順序表中指定序號對應的的元素
{
flag:
cout << "你想修改第幾個元素"<<endl;
int n;
cin >> n;
if (n<1 || n>L->SeqLength - 1)
{
cout << "超出順序表範圍,請重新選擇" << endl;
goto flag;
}
cout << "請輸入修改的元素"<<endl;
int m;
cin >> m;
L->data[n - 1] = m;
}
int main()
{
SeqList *L;//順序表的定義
L = Init_SeqList();//順序表的初始化
Define_SeqList(L);//定義順序表
fflush(stdin);//清空輸入緩衝區,作用是防止多輸入資料導致錯誤
flag://flag4
cout<<"*------------------------------------------------------*"<<endl;//從這開始選擇功能
cout << "請選擇功能:"
<< endl << "1.輸出指定序號元素"
<< endl << "2.輸出指定元素的序號"
<< endl << "3.刪除指定序號的元素"
<< endl << "4.插入元素到指定位置"
<< endl << "5.輸出順序表"
<< endl << "6.修改指定序號對應的元素"
<< endl << "0.退出程式" << endl;
int s;
cin >> s;
switch (s)
{
case 1:GetData_SeqList(L); break;//輸出指定序號的元素
case 2:GetNumber_SeqList(L); break;//輸出指定元素的序號
case 3:Delete_SeqList(L); break; //刪除指定序號的元素
case 4:Insert_SeqList(L); break; //插入元素到指定位置
case 5:Display_SeqList(L); break;//順序表的輸出
case 6:Updata_SeqList(L); break;//修改指定序號對應的元素
default:cout << "謝謝使用!";
break;
}
cout << "是否繼續使用順序表其他功能?1 for 是;2 for 否"<<endl;
int ss;
cin >> ss;
if (ss == 1)
{
goto flag;//flag4
}
system("pause");
return 0;
}