一、顺序表的概念
顺序表就是利用数组,将数据存储起来的顺序存储结构,是线性表的一种形式。通常声明一个结构体来表示顺序表,结构体中包含两个部分,一个部分是用于存储数据的数组,另一个部分是最后一个元素在数组中的下标。
#define MAXSIZE 100
typedef struct
{
char elem[MAXSIZE];
int last; //记录最后一个元素在数组中的下标
}SeqList;
二、顺序表的创建
顺序表的创建,就是向数组中不断填入数据,并在填完数据后给last赋值的操作。
void Create(SeqList *L)
{
int flag = 1,i = 0;
char c;
while (flag)
{
c = getchar();
if (c != '\n')
{
L->elem[i] = c;
i++;
}
else
{
L->last = i-1;
flag = 0;
}
}
}
三、顺序表的插入操作
实现在第i个位置前插入给定字符。
int InsList(SeqList *L,int i,char e)
{
if ((i < 1) || (i > L->last+2))
{
printf("出错了!没办法在这个位置插入!\n");
return 0;
}
if (L->last + 1 >= MAXSIZE)
{
printf("表已满!无法再进行插入操作了!\n");
return 0;
}
for (int k = L->last; k >= i-1; k--)
{
L->elem[k+1] = L->elem[k];
}
L->elem[i-1] = e;
L->last++;
return 1;
}
四、顺序表的删除操作
实现删除第i个位置的元素。
int DelList(SeqList *L,int i)
{
if ((i < 1) || (i > L->last+1))
{
printf("该位置元素无法删除!");
return 0;
}
for (int k = i; k <= L->last; k++)
{
L->elem[k-1] = L->elem[k];
}
L->last--;
return 1;
}
五、顺序表的查找操作
给出数据,查找其在顺序表中的位置。
int Locate(SeqList L,char e)
{
int i = 0;
while ((i <= L.last) && (L.elem[i] != e))
{
i++;
}
if (i>L.last)
{
printf("找不到你想要的这个字符!\n");
return -1;
}
else
{
return i;
}
}
六、合并顺序表
将两个有序顺序表合并。
void MergeList(SeqList *LA,SeqList *LB)
{
SeqList *LC = (SeqList *)malloc(sizeof(SeqList));
int i = 0, j = 0, k = 0;
while ((i <= LA->last) && (j <= LB->last))
{
if (LA->elem[i] > LB->elem[j])
{
LC->elem[k] = LB->elem[j];
k++;
j++;
}
else
{
LC->elem[k] = LA->elem[i];
k++;
i++;
}
}
if (i <= LA->last)
{
for (;i <= LA->last; i++,k++)
{
LC->elem[k] = LA->elem[i];
}
}
if(j <= LB->last)
{
for (;j <= LB->last; j++,k++)
{
LC->elem[k] = LB->elem[j];
}
}
printf("合并后的字符串是:");
for (int l=0;l<=k;l++)
{
printf("%c",LC->elem[l]);
}
printf("\n");
}