順序表の例(全)
6502 ワード
シーケンステーブルの初期化、追加、挿入、削除などの機能の例
プロジェクトは全部で4つのファイル1.Enttity.hを含みます.リニアテーブルの要素の種類を宣言します.基本データタイプであっても良いし、構造体2.SeqList.h:線形テーブル構造体を定義し、グローバルマクロ定義を宣言し、関数の声明3.SeqList.c:具体的な関数実現4.main.c:テストファイル
ブログ記事を参照:http://www.cnblogs.com/laojie4321/archive/2012/03/30/2425015.html ブログ記事を参照:http://blog.163.com/jiaoruijun07@126/blog/static/689432782045246409/
Enttity.h
プロジェクトは全部で4つのファイル1.Enttity.hを含みます.リニアテーブルの要素の種類を宣言します.基本データタイプであっても良いし、構造体2.SeqList.h:線形テーブル構造体を定義し、グローバルマクロ定義を宣言し、関数の声明3.SeqList.c:具体的な関数実現4.main.c:テストファイル
ブログ記事を参照:http://www.cnblogs.com/laojie4321/archive/2012/03/30/2425015.html ブログ記事を参照:http://blog.163.com/jiaoruijun07@126/blog/static/689432782045246409/
Enttity.h
typedef struct{
char key[15]; //
char name[20];
int age;
} DATA; //
SeqList.h /*
:
*/
#include
#include
#include "Entity.h"
#define MAXSIZE 100 //
typedef struct {
DATA ListData[MAXSIZE + 1]; // ( 1 )
int ListLen; // ( ); 0,
} SeqListType;
void SeqListInit(SeqListType *SL); //
int SeqListLength(SeqListType *SL); //
int SeqListAdd(SeqListType *SL, DATA data); //
int SeqListInsert(SeqListType *SL, int n, DATA data); //
int SeqListDelete(SeqListType *SL, int n); //
DATA *SeqListFindByNum(SeqListType *SL, int n); //
int SeqListFindByCont(SeqListType *SL, char *key); //
int SeqListAll(SeqListType *SL); //
SeqList. /* : */
#include "SeqList.h"
/* */
void SeqListInit(SeqListType *SL){
SL->ListLen = 0;
}
/* */
int SeqListLength(SeqListType *SL){
return (SL->ListLen);
}
/* */
int SeqListAdd(SeqListType *SL, DATA data){
if(SL->ListLen >= MAXSIZE){ //
printf(" ");
return 0; //
}
SL->ListData[++SL->ListLen] = data; // (ListLen+1)
return 1;//
}
/* */
int SeqListInsert(SeqListType *SL, int n, DATA data){
int i;
if(SL->ListLen >= MAXSIZE){ //
printf("
");
return 0;
}
if(n < 1 || n > SL->ListLen){
printf("
");
return 0;
}
for(i = SL->ListLen; i>=n; i--){ //
SL->ListData[i+1] = SL->ListData[i];
}
SL->ListData[n] = data; //
SL->ListLen++; //
return 1;
}
int SeqListDelete(SeqListType *SL, int n){
int i;
if(n < 1 || n > SL->ListLen+1){
printf("
");
return 0;
}
for(i=n; iListLen; i++){ //
SL->ListData[i] = SL->ListData[i + 1];
}
SL->ListLen--;
return 1;
}
DATA *SeqListFindByNum(SeqListType *SL, int n){
if(n < 1 || n > SL->ListLen+1){
printf(" ");
return NULL;
}
return &(SL->ListData[n]); //
}
int SeqListFindByCont(SeqListType *SL, char *key){
int i;
for(i = 0; i <= SL->ListLen; i++){
if(strcmp(SL->ListData[i].key, key) == 0){
return i;
}
}
return 0; //
}
メール./* : */
#include
#include "SeqList.h"
/* */
int SeqListAll(SeqListType *SL){
int i;
for(i = 0; i <= SL->ListLen; i++){
// 0, 0
printf("(%s %s %d)
", SL->ListData[i].key, SL->ListData[i].name, SL->ListData[i].age);
}
return 0;
}
int main(void){
int i, k;
SeqListType SL; //
DATA data, *data1; //
char key[15]; //
SeqListInit(&SL); //
do{
printf(" : ");
fflush(stdin); //
scanf("%s %s %d", &data.key, &data.name, &data.age);
if(data.age){ // 0
if(!SeqListAdd(&SL, data)){//
break; //
}
}else{ // 0
break;
}
}while(1);
printf(" :
");
SeqListAll(&SL);
while(1){
fflush(stdin);
printf("
1. \t2. \t3. \t4. \t5. \t6. \t7. \t8.
:");
scanf("%d", &k);
if(k == 8){
break;
}
switch(k){
case 1:
printf(" :");
scanf("%d", &i);
data1 = SeqListFindByNum(&SL, i);
printf(" :(%s %s %d)
", data1->key, data1->name, data1->age);
break;
case 2:
printf(" key( ):");
scanf("%s", &key);
i = SeqListFindByCont(&SL, key);
if(i == 0){
printf(" !");
break;
}
data1 = SeqListFindByNum(&SL, i);
printf(" : %d , :(%s %s %d)
", i, data1->key, data1->name, data1->age);
break;
case 3:
printf(" :");
scanf("%s %s %d", &data.key, &data.name, &data.age);
SeqListAdd(&SL, data);
break;
case 4:
printf(" :");
scanf("%d %s %s %d", &i, &data.key, &data.name, &data.age);
SeqListInsert(&SL, i, data);
break;
case 5:
printf(" :");
scanf("%d", &i);
SeqListDelete(&SL, i);
break;
case 6:
printf("-----%d------
", SeqListLength(&SL));
break;
case 7:
SeqListAll(&SL);
break;
}
}
return 0;
}
個人ブログへようこそいらっしゃいました.http://ay2626.me