シーケンステーブルおよびC実装
4410 ワード
論理構造上線形に分布するデータ要素は、実際の物理記憶構造においても同様に互いに隣接しており、この記憶構造を線形テーブルの順序記憶構造と呼ぶ
論理的に線形関係を持つデータは、前後の順序ですべて連続したメモリ空間に格納され、間に隙間が存在しない.このような記憶構造を順序記憶構造と呼ぶ.シーケンスストレージ構造を使用して格納されたデータは、最初の要素が存在するアドレスがこのストレージ空間の最初のアドレスです.ヘッダアドレスにより、格納されているすべてのデータに簡単にアクセスできます.ヘッダアドレスが失われない限り、データは永遠に見つかります(ロープの上のバッタは、あればあります).
1.順序テーブルの構造を定義する
2.順序表の作成
3.順序表検索要素
普通遍歴
4.順序表の要素の変更
検索アルゴリズムを呼び出して、データ要素の場所を見つけ、その場所で直接変更します.
5.順序表挿入要素
データ要素を挿入するには、次の3つのケースがあります.
シーケンステーブルのどの位置にデータ要素を挿入しても、挿入する位置を見つけて、後続のデータ要素を全体的に1つ後ろに移動し、最後に直接飛び出した位置にデータ要素を挿入します.
6.順序表削除要素
配列から要素を削除する場合は、その要素が位置するすべてのデータ要素を1つ前に移動するだけでよい.
前に移動中に削除された要素が後の要素で上書きされ、間接的に削除操作が実現されます.
完全なコードインスタンス
注意for(int i;)
出力:
論理的に線形関係を持つデータは、前後の順序ですべて連続したメモリ空間に格納され、間に隙間が存在しない.このような記憶構造を順序記憶構造と呼ぶ.シーケンスストレージ構造を使用して格納されたデータは、最初の要素が存在するアドレスがこのストレージ空間の最初のアドレスです.ヘッダアドレスにより、格納されているすべてのデータに簡単にアクセスできます.ヘッダアドレスが失われない限り、データは永遠に見つかります(ロープの上のバッタは、あればあります).
1.順序テーブルの構造を定義する
typedef struct Table{
int * head;// head , “ ”
int length;//
int size;//
}table;
2.順序表の作成
table initTable(){
table t;
t.head=(int*)malloc(Size*sizeof(int));// ,
if (!t.head) // ,
{
printf(" ");
exit(0);
}
t.length=0;// 0
t.size=Size;// Size
return t;
}
3.順序表検索要素
普通遍歴
// , ,elem
int selectTable(table t,int elem){
for (int i=0; i
4.順序表の要素の変更
検索アルゴリズムを呼び出して、データ要素の場所を見つけ、その場所で直接変更します.
// , ,elem ,newElem
table amendTable(table t,int elem,int newElem){
int add=selectTable(t, elem);
t.head[add-1]=newElem;// , -1
return t;
}
5.順序表挿入要素
データ要素を挿入するには、次の3つのケースがあります.
1).
2).
3). ,
シーケンステーブルのどの位置にデータ要素を挿入しても、挿入する位置を見つけて、後続のデータ要素を全体的に1つ後ろに移動し、最後に直接飛び出した位置にデータ要素を挿入します.
// , ,elem ,add
table addTable(table t,int elem,int add)
{
// ( +1 ( , ),
// , )
if (add>t.length+1||add<1) {
printf(" ");
return t;
}
// , , ,
if (t.length==t.size) {
t.head=(int *)realloc(t.head, (t.size+1)*sizeof(int));
if (!t.head) {
printf(" ");
return t;
}
t.size+=1;
}
// , ,
for (int i=t.length-1; i>=add-1; i--) {
t.head[i+1]=t.head[i];
}
// , ,
t.head[add-1]=elem;
// , +1
t.length++;
return t;
}
6.順序表削除要素
配列から要素を削除する場合は、その要素が位置するすべてのデータ要素を1つ前に移動するだけでよい.
前に移動中に削除された要素が後の要素で上書きされ、間接的に削除操作が実現されます.
table delTable(table t,int add){
if (add>t.length || add<1) {
printf(" ");
exit(0);
}
//
for (int i=add; i
完全なコードインスタンス
#include
#include
#define Size 6
typedef struct Table{
int * head;
int length;
int size;
}table;
table initTable(){
table t;
t.head=(int*)malloc(Size*sizeof(int));
if (!t.head)
{
printf(" ");
exit(0);
}
t.length=0;
t.size=Size;
return t;
}
table addTable(table t,int elem,int add)
{
if (add>t.length+1||add<1) {
printf(" ");
return t;
}
if (t.length>=t.size) {
t.head=(int *)realloc(t.head, (t.size+1)*sizeof(int));
if (!t.head) {
printf(" ");
}
t.size+=1;
}
for (int i=t.length-1; i>=add-1; i--) {
t.head[i+1]=t.head[i];
}
t.head[add-1]=elem;
t.length++;
return t;
}
table delTable(table t,int add){
if (add>t.length || add<1) {
printf(" ");
exit(0);
}
for (int i=add; i
注意for(int i;)
出力:
:123456
:23456
2 5:253456
3 :3
3 6:256456