データ構造の実践——逐次的なアルゴリズム
5324 ワード
本論文はデータ構造基礎シリーズのネットワーク課程(4)に対して、実践項目を実行します.
【項目・逐次アルゴリズム】逐次記憶方式を用いて列を格納し、次のアルゴリズムを実施してテストする.(1)試行アルゴリズムは、文字列Sの中のすべての値をc 1とする文字をc 2とする文字に変換することを実現する.void Trans(SqString*&s,char c 1,char c 2).(2)アルゴリズムを試みて、既知の文字列のすべての文字を逆にして並べ替えることを実現します.ABCDEFのようにFEDCBAに変更します.void Invert(SqString&s)(3)シリアルからその値がcに等しいすべての文字を削除します.メッセージから’e’を削除すると、得られるのはmssagです.void DellChar(SqString&s,char c)(4)はs 1とs 2の2つの列があり、アルゴリズムを設計してこのような列を求めます.この列の文字はs 1とs 2の共通文字です.共通部分列とは、s 1にあり、s 2にもある文字からなる文字です.例s 1は「メッセージ」であり、s 2は「メッセージ」であり、得られた共通のサブストリングは「eage」である.SqString CommChar(SqString s 1、SqString s 2)
[参照解答](ヘッダファイルsqstring.hは順番に並べて計算します.)試写アルゴリズムは、文字列Sのすべての値をc 1とする文字をc 2とする文字に変換することを実現します.void Trans(SqString*&s,char c 1,char c 2);参考:
参照:文字列の最初の要素を最後の要素と交換し、2番目の要素を最後から2番目の要素と交換し、これを類推してすべての文字を交換し、最後に文字列を逆順にします.
参考:最初から最後までs列をスキャンして、その値がcの元素に対して移動する方式で削除します.
参考:s 1の各文字について、s 2に表示されているかどうかを確認し、出現したら結果文字列に追加します.
【項目・逐次アルゴリズム】逐次記憶方式を用いて列を格納し、次のアルゴリズムを実施してテストする.(1)試行アルゴリズムは、文字列Sの中のすべての値をc 1とする文字をc 2とする文字に変換することを実現する.void Trans(SqString*&s,char c 1,char c 2).(2)アルゴリズムを試みて、既知の文字列のすべての文字を逆にして並べ替えることを実現します.ABCDEFのようにFEDCBAに変更します.void Invert(SqString&s)(3)シリアルからその値がcに等しいすべての文字を削除します.メッセージから’e’を削除すると、得られるのはmssagです.void DellChar(SqString&s,char c)(4)はs 1とs 2の2つの列があり、アルゴリズムを設計してこのような列を求めます.この列の文字はs 1とs 2の共通文字です.共通部分列とは、s 1にあり、s 2にもある文字からなる文字です.例s 1は「メッセージ」であり、s 2は「メッセージ」であり、得られた共通のサブストリングは「eage」である.SqString CommChar(SqString s 1、SqString s 2)
[参照解答](ヘッダファイルsqstring.hは順番に並べて計算します.)試写アルゴリズムは、文字列Sのすべての値をc 1とする文字をc 2とする文字に変換することを実現します.void Trans(SqString*&s,char c 1,char c 2);参考:
#include
#include "sqString.h"
void Trans(SqString &s, char c1, char c2)
{
int i;
for (i=0; iint main()
{
SqString s;
StrAssign(s, "messages");
Trans(s, 'e', 'a');
DispStr(s);
return 0;
}
(2)アルゴリズムを試みて、既知の文字列のすべての文字を逆にして並べ替えることを実現します.ABCDEFのようにFEDCBAに変更します.void Invert(SqString&s)参照:文字列の最初の要素を最後の要素と交換し、2番目の要素を最後から2番目の要素と交換し、これを類推してすべての文字を交換し、最後に文字列を逆順にします.
#include
#include "sqString.h"
void Invert(SqString &s)
{
int i;
char temp;
for (i=0; i2; i++)
{
temp = s.data[i];
s.data[i]=s.data[s.length-i-1];
s.data[s.length-i-1] = temp;
}
}
int main()
{
SqString s;
StrAssign(s, "abcdefg");
Invert(s);
DispStr(s);
return 0;
}
(3)シリアルからその値がcに等しいすべての文字を削除します.メッセージから’e’を削除すると、得られるのはmssagです.void DellChar(SqString&s,char c)参考:最初から最後までs列をスキャンして、その値がcの元素に対して移動する方式で削除します.
#include
#include "sqString.h"
void DellChar(SqString &s, char c)
{
int k=0, i=0; //k c
while(ielse
s.data[i-k]=s.data[i];
i++;
}
s.length -= k;
}
int main()
{
SqString s;
StrAssign(s, "message");
DellChar(s, 'e');
DispStr(s);
return 0;
}
(4)s 1とs 2が2つあります.アルゴリズムを設計して、s 1とs 2の共通文字を求めます.共通部分列とは、s 1にあり、s 2にもある文字からなる文字です.例s 1は「メッセージ」であり、s 2は「メッセージ」であり、得られた共通のサブストリングは「eage」である.SqString CommChar(SqString s 1、SqString s 2)参考:s 1の各文字について、s 2に表示されているかどうかを確認し、出現したら結果文字列に追加します.
#include
#include "sqString.h"
SqString CommChar(SqString s1,SqString s2)
{
SqString s3;
int i,j,k=0;
for (i=0; ilength; i++)
{
for (j=0; jlength; j++)
if (s2.data[j]==s1.data[i])
break;
if (jlength) //s1.data[i]
{
s3.data[k]=s1.data[i];
k++;
}
}
s3.length=k;
return s3;
}
int main()
{
SqString s1, s2, s;
StrAssign(s1, "message");
StrAssign(s2, "agent");
s = CommChar(s1, s2);
DispStr(s);
return 0;
}