データ構造-順序線形表の基本動作を実現します.
順序格納構造:利点: 1、ランダムアクセス(時間複雑度はO(1)); 2、表の要素間の論理関係を表すために追加の記憶空間を追加する必要はない.短所: 1、挿入、削除操作は大量の元素を移動する必要があり、効率が低い(時間複雑度はO(n))). 2、表の長さは分かりにくいです.
一、リニアテーブルの定義
一、リニアテーブルの定義
#include <stdio.h>
#include <stdlib.h>
#define LIST_SIZE 100
typedef struct _SeqList
{
char *data;
int length;//
int listsize;//
}SeqList;
二、リニアテーブルの初期化int list_init(SeqList *seqList)
{
seqList->data = (char *)malloc(LIST_SIZE * sizeof(char));
seqList->length = 0;
seqList->listsize = LIST_SIZE;
return 0;
}
三、リニアテーブルデータ挿入int list_insert(SeqList *seqList, int i, char d)
{
// ,
char *p = seqList->data+(i-1);
for (char *q = seqList->data+(seqList->length - 1); q >= p; q --)
{
*(p+1) = *p;
}//i
*p = d;
seqList->length++;
return 0;
}
四、リニアテーブルデータ削除int list_delete(SeqList *seqList, int i)
{
char Data = seqList->data[i -1];
char *q = seqList->data+(seqList->length - 1);
for (char *p = seqList->data+(i-1); p < q; p ++)
{
*p = *(p + 1);
}//i
seqList->length--;
return Data;
}
五、リニアテーブルのデータ位置の確定int list_elem(SeqList *seqList, char d)
{
int i = 1;
char *p = seqList->data;
while(*p++!=d && i<=seqList->length)// d
i++;
if(i >= seqList->length)
return 0;
else
return i;
}
六、主関数作成int main()
{
SeqList seqList;
list_init(&seqList);
for(int i = 1; i<=10; i++)
list_insert(&seqList, i, i);//
printf("deletd_data: %d
",list_delete(&seqList, 3));// ,
printf("elem_data: %d
",list_elem(&seqList, 5));// ,
for(int i = 1; i<=5; i++)//
printf("data%d: %d
", i, seqList.data[i-1]);
return 0;
}
注:以上のコードをコピーしてそのまま使用できます.コンパイルコマンドは、gcc seqlist.c-std=c 99-o seqlistです. (seqlist.cはファイル名です)