まず、シーケンステーブルの概念
線形形態の論理的な順序では、順次連続したメモリ空間に格納されます。
第二に、特性
1は、利点は、アレイへの同様のアクセスのインデックス、に従って作製することができる、それが便利です。
2、欠点は、あなたが要素を挿入または削除する必要がある場合、あなたは多くの要素を移動する必要があります。
第三に、コードショー
1、ヘッダファイル
#include<stdio.h>
#include<assert.h>
#include<string.h>
2、文のシーケンステーブル
#define Maxsize_ 15
typedef struct Sqlist
{
int array[Maxsize_]; //总的元素空间
int size; //有效元素个数
};
図3に示すように、機能コード
//初始化
void initlist(Sqlist* sqlist)
{
assert(sqlist);
memset(sqlist,0,sizeof(int)*Maxsize_);
sqlist->size=0;
}
//尾插
void Zinsert(Sqlist*sqlist,int data)
{
assert(sqlist);
if(sqlist->size==Maxsize_||sqlist->size>Maxsize_)
{
printf("已满无法插入\n");
return;
}
sqlist->array[sqlist->size+1]=data;
sqlist->size++;
}
//头插
void Ainsert(Sqlist*sqlist,int data)
{
assert(sqlist);
if(sqlist->size==Maxsize_||sqlist->size>Maxsize_)
{
printf("已满无法插入\n");
return;
}
if(sqlist->size==0)
{
sqlist->size++;
sqlist->array[1]=data;
}
else
{
for(int i=sqlist->size;i>=1;i--)
{
sqlist->array[i+1]=sqlist->array[i];
}
sqlist->array[1]=data;
sqlist->size++;
}
}
//按位置删除
void posdelete(Sqlist* sqlist,int pos)
{
assert(sqlist);
if(sqlist->size<1)
{
return;
}
//优化处理
if(pos<1||pos>sqlist->size)
{
pos=sqlist->size;
}
for(int i=pos;i<=sqlist->size;i++)
{
sqlist->array[i]=sqlist->array[i+1];
}
sqlist->array[sqlist->size]=0;
sqlist->size--;
}
//按值删除(删除顺序表中所有的此值)
void valuedelete(Sqlist* sqlist,int value)
{
assert(sqlist);
if(sqlist->size<1)
{
return;
}
//方法一
//for(int i=sqlist->size;i>0;i--)
//{
// if(sqlist->array[i]==value)
// {
// for(int j=i;j<=sqlist->size;j++)
// {
// sqlist->array[j]=sqlist->array[j+1];
// }
// sqlist->size--;
// }
//}
//方法二
for(int i=1;i<=sqlist->size;i++)
{
if(sqlist->array[i]==value)
{
for(int j=i;j<=sqlist->size;j++)
{
sqlist->array[j]=sqlist->array[j+1];
}
sqlist->size--;
i--;
}
}
}
//打印
void myprint(Sqlist* sqlist)
{
if(sqlist->size==0)
{
printf("为空不能打印");
return;
}
printf("array=");
for(int i=1;i<=sqlist->size;i++)
{
printf(" %d",sqlist->array[i]);
}
printf("\n");
}
図4に示すように、主な機能
int main()
{
Sqlist sqlist;
initlist(&sqlist);
//尾插
Zinsert(&sqlist,4);
Zinsert(&sqlist,4);
Zinsert(&sqlist,3);
Zinsert(&sqlist,4);
Zinsert(&sqlist,5);
Zinsert(&sqlist,4);
myprint(&sqlist);
//按位置删除
posdelete(&sqlist,3);
myprint(&sqlist);
//按值删除
valuedelete(&sqlist,4);
myprint(&sqlist);
//头插
Ainsert(&sqlist,1);
Ainsert(&sqlist,2);
Ainsert(&sqlist,3);
Ainsert(&sqlist,4);
Ainsert(&sqlist,5);
Ainsert(&sqlist,6);
myprint(&sqlist);
printf("%d\n",sqlist.size);
}
第四に、業績