C++ はシーケンス テーブルのさまざまな基本操作を実装します。

順序表の記憶構造を理解し、順序表における各種基本演算アルゴリズムの設計をマスターする

シーケンステーブルの各種基本操作とテーブル全体の構築アルゴリズムを実現します(シーケンステーブルの要素型ElemTypeがcha​​rであるものとします)

プログラム要件:

1. シーケンステーブル L を初期化します。

2. A、B、C、D、E 要素を順番に挿入します。

3. シーケンステーブル L を出力します。

4. シーケンステーブル L の長さを決定します。

5. シーケンスリスト L が空リストかどうかを判定します。

6. ユーザの入力位置に従って、対応するシーケンスリスト L の要素を出力します。

7. ユーザーが入力した要素に従って、対応するシーケンス テーブル内の L 要素の位置を出力します。

ユーザが入力した位置および要素に従って、新しい要素をシーケンステーブルLに挿入する。

9. シーケンステーブルLを出力します。

ユーザが入力した位置に従って、シーケンステーブルL内の対応する要素を削除する; 10.

シーケンステーブルLを出力する; 11.

リリースシーケンステーブルL;12.

-------------------------------------------------- -------------------------------------------------- ---------------

知らせ:

1. ElemType eとElemType &eの違い

2. 論理シリアル番号と物理シリアル番号の変換に注意してください

-------------------------------------------------- --------------------------------------------

線形テーブルの構造タイプを定義します

#include <iostream.h>
#define MaxSize 100
typedef char ElemType;

typedef struct 
{
	ElemType data[MaxSize];
   	int length;
} SqList;   //定义线性表结构体类型 

1. 線形テーブル関数の初期化

//初始化线性表
void InitList(SqList *&L)   //引用型指针
{
	L= new SqList;       /*分配存放线性表的空间*/
    L->length=0;
}

2. 線形テーブル関数を作成する

//建立线性表
void CreateList(SqList *&L,ElemType a[],int n)  
{
	for (int i=0;i<n;i++)
		L->data[i]=a[i];
	L->length=n;
}

3. 線形テーブル関数を破壊する

//销毁线性表
void DestroyList(SqList *&L)
{
	delete L;
}

4. 線形テーブルが空のテーブル関数であるかどうかを判断します。 

線形テーブルが空のテーブルの場合は true を返します

線形テーブルが空のテーブルでない場合は false を返します

//判定是否为空表
bool ListEmpty(SqList *L)
{
	return(L->length==0);
}

5. 線形テーブルの長さ関数を求める

//求线性表的长度
int ListLength(SqList *L)
{
	return(L->length);
}

6. 出力線形テーブル関数

void DispList(SqList *L)
{
	if (ListEmpty(L))
		return;
	for (int i=0;i<L->length;i++)
		cout<<L->data[i]<<"   ";
	cout<<endl;
} 

7. データ要素の値を見つける

このとき、i は論理シーケンス番号です。

i-1経由で物理シリアル番号に変換

//求某个数据元素值
bool GetElem(SqList *L,int i,ElemType &e)
{
	if (i<1 || i>L->length) 
		return false;
	e=L->data[i-1];
	return true;
}

8. 要素値による検索

//按元素值查找
int LocateElem(SqList *L, ElemType e)
{
	int i=0;
	while (i<L->length && L->data[i]!=e) 
		i++;
	if (i>=L->length)
		return 0;
	else 
		return i+1;
}

9. データ要素の挿入

//插入数据元素
bool ListInsert(SqList *&L,int i,ElemType e)
{
    if (i<1 || i>L->length+1)
		return false;
    i--;  /*将顺序表逻辑位序转化为elem下标即物理位序*/
    for (int j=L->length;j>i;j--)/*将data[i]及后面元素后移一个位置*/
		L->data[j]=L->data[j-1];
                
	L->data[i]=e;   //将新元素插入该位置
	L->length++;      /*顺序表长度增1*/
	return true;
}

10. データ要素の削除

//删除数据元素
bool ListDelete(SqList *&L,int i,ElemType &e)
{
     int j;
     if (i<1 || i>L->length)
		 return false;
     i--;	   /*将顺序表逻辑位序转化为elem下标即物理位序*/
     e=L->data[i];
     for (j=i;j<L->length-1;j++) L->data[j]=L->data[j+1];
            /*将data[i]之后的元素前移一个位置*/
     L->length--;	/*顺序表长度减1*/
     return true;
}

-------------------------------------------------- --------------------------------------------

メイン機能

ListInsert 関数または CreateList 関数を使用してテーブルを作成できます。

void main()
{
	SqList *L1;
	cout<<"1.初始化顺序表:"<<endl;InitList(L1);

	cout<<"\n2.尾插法建表:"<<endl;
	ElemType a[5]={'A','B','C','D','E'};
    for(int i=0;i<5;i++)
		if(!ListInsert(L1,i+1,a[i]))
			cout<<"插入失败!";
	cout<<"\n3.顺序表的元素为:";
	DispList(L1);


	cout<<"\n4.该顺序表的长度为:"<<ListLength(L1)<<endl;

	cout<<"\n5.该顺序表";
	if(ListEmpty(L1))
		cout<<"为空!"<<endl;
	else
		cout<<"不为空!"<<endl;


	cout<<"\n6.取元素";
	ElemType temp;cout<<"请输入取的位置:";int k;cin>>k;
	if(GetElem(L1,k,temp))
		cout<<"取值成功,该顺序表的第"<<k<<"个元素的值为:"<<temp<<endl;
	else
		cout<<"取值失败,你输入的位置"<<k<<"越界:"<<endl;

  
	cout<<"\n7.查找元素:"<<endl<<"请输入查找元素的值:";cin>>temp;
	if(LocateElem(L1,temp))
		cout<<"输出元素'"<<temp<<"'的位置为:"<<LocateElem(L1,temp)<<endl;
	else
		cout<<"元素'"<<temp<<"'不存在."<<endl;
  
	cout<<"\n8.在顺序表指定位置插入元素 :"<<endl;
	cout<<"请输入插入的位置:";cin>>k;
	cout<<"请输入插入元素的值:";cin>>temp;

	if(ListInsert(L1,k,temp))
		cout<<"插入成功"<<endl;
	else
		cout<<"插入失败!"<<endl;

	cout<<"\n9.输出顺序表"<<endl;
	DispList(L1);
	
	cout<<"\n10.删除顺序表指定位置的元素"<<endl;
	cout<<"请输入删除的位置:";cin>>k;
	if(ListDelete(L1,k,temp))
		cout<<"删除成功,删除的元素为:"<<temp<<endl;
	else
		cout<<"删除失败!"<<endl;

	cout<<"\n11.输出顺序表"<<endl;
	DispList(L1);
	cout<<"\n12.释放顺序表"<<endl;
	DestroyList(L1);

}

おすすめ

転載: blog.csdn.net/henry594xiaoli/article/details/123619337