データ構造---シーケンステーブルの実装(C言語版)

2924 ワード

ここで我々の目的は簡単にシーケンステーブルを実現することである:シーケンステーブルを初期化し、5個の数を挿入して出力し、2と6がシーケンステーブルにあるかどうかを検索し、3番目の数を取り出し、最後に3番目の数を削除する
操作プロセスは次のとおりです.
1.はじめに前処理
#include
#define maxn 100
typedef int Status;
using namespace std;
typedef struct{
	int *elem;
	int length;
}SqList;

2.初期化
//       
Status InitList(SqList &l){
	l.elem = new int(maxn);
	if(!l.elem)
		exit(-2);
	l.length = 0;
	return 1;
}

3.挿入
//      (        e   i   )
Status ListInsert(SqList &l,int i,int e){
	if(i<1||i>l.length+1)
		return 0;
	if(l.length==maxn)
		return 0;
	for(int j=l.length-1;j>=i-1;j--){
		l.elem[j+1]=l.elem[j];
	}
	l.elem[i-1]=e;
	l.length++;
	return 1;
} 

4.値を取る
//        i   (1<=i&&i<=l.length)
Status GetElem(SqList &l,int i,int &e){
	if(i<1||i>l.length)
		return 0;
	e = l.elem[i-1];
	return 1;
}

5.検索
//      (             ,           ,     0) 
int LocateElem(SqList &l,int e){
	for(int i=0;i

6.削除
//      (        i   )
Status ListDelete(SqList &l,int i){
	if(i>l.length||i<1)
		return 0;
	for(int j=i;j<=l.length-1;j++){
		l.elem[j-1]=l.elem[j];
	}
	l.length--;
	return 1;
} 

7.出力関数:順序テーブルが実装されているかどうかを確認するために、現在の順序テーブルのすべての要素を印刷する出力関数を書きました.
//         
Status PrintList(SqList &l){
	if(l.length==0)
		return 0;
	printf("            :");
	for(int i=0;i

これで、シーケンステーブルの機能は大きく変わりません.完全なコードは以下の通りです.
#include
#define maxn 100
typedef int Status;
using namespace std;
typedef struct{
	int *elem;
	int length;
}SqList;

//       
Status InitList(SqList &l){
	l.elem = new int(maxn);
	if(!l.elem)
		exit(-2);
	l.length = 0;
	return 1;
}

//        i   (1<=i&&i<=l.length)
Status GetElem(SqList &l,int i,int &e){
	if(i<1||i>l.length)
		return 0;
	e = l.elem[i-1];
	return 1;
}

//      (             ,           ,     0) 
int LocateElem(SqList &l,int e){
	for(int i=0;il.length+1)
		return 0;
	if(l.length==maxn)
		return 0;
	for(int j=l.length-1;j>=i-1;j--){
		l.elem[j+1]=l.elem[j];
	}
	l.elem[i-1]=e;
	l.length++;
	return 1;
} 

//      (        i   )
Status ListDelete(SqList &l,int i){
	if(i>l.length||i<1)
		return 0;
	for(int j=i;j<=l.length-1;j++){
		l.elem[j-1]=l.elem[j];
	}
	l.length--;
	return 1;
} 

//         
Status PrintList(SqList &l){
	if(l.length==0)
		return 0;
	printf("            :");
	for(int i=0;i