#C顺序表的静态实现
跟着b站吴叔学的 不过被我省略了好多细节。。。
定义以及引用的头文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#define MAXSIZE 10
#define ElemType int
typedef struct
{
ElemType data[MAXSIZE];
int length;
}SeqList,*PSeqList;
函数声明
int InitList(PSeqList L);
void ClearList(PSeqList L);
int PrintList(PSeqList L);
int InsertElem(PSeqList L, int i, ElemType* e);
int InsertHead(PSeqList L, ElemType* e);
int TnsertEnd(PSeqList L, ElemType* e);
int DeleteElem(PSeqList L, int i);
int DeleteHead(PSeqList L);
int DeleteEnd(PSeqList L);
int LengthList(PSeqList L);
int GetElem(PSeqList L, int i,ElemType* e);
int SearchList(PSeqList L ,ElemType* e);
初始化
int main()
{
SeqList L;
ElemType e;
test(&L,&e);
system("pause");
return 0;
}
函数具体功能实现
int InitList(PSeqList L)
{
assert(L);
ClearList(L);
return 1;
}
void ClearList(PSeqList L)
{
L->length = 0;
memset(L->data, 0, sizeof(L->length)*sizeof(ElemType));
}
int PrintList(PSeqList L)
{
assert(L);
if (L->length == 0)
{
printf("表里啥都没有");
return 0;
}
int k;
for (k = 0; k < L->length; k++)
{
printf("%d ", L->data[k]);
}
printf("\n");
return 1;
}
int InsertElem(PSeqList L, int i, ElemType* e)
{
assert(L || e);
if (L->length == MAXSIZE)
{
printf("满了,别插了");
return 0;
}
if ((i < 1) || (i > L->length + 1))
{
printf("输入的数字有误,请在(%d)-(%d)范围内选择输入\n", 1, L->length + 1);
return 0;
}
int k;
for (k = L->length; k >= i; k--)
{
memcpy(&L->data[k], &L->data[k - 1], sizeof(ElemType));
}
memcpy(&L->data[i - 1], e, sizeof(ElemType));
L->length++;
return 1;
}
int InsertHead(PSeqList L, ElemType* e)
{
return InsertElem(L, 1, e);
}
int InsertEnd(PSeqList L, ElemType* e)
{
return InsertElem(L, L->length + 1, e);
}
int DeleteElem(PSeqList L, int i)
{
assert(L);
if ((i<1) || (i>L->length))
{
printf("输入有误,请在(%d)-(%d)范围内选择输入\n", 1, L->length);
return 0;
}
int k;
for (k = i; k <= L->length; k++)
{
memcpy(&L->data[k - 1], &L->data[k], sizeof(ElemType));
}
L->length--;
return 1;
}
int DeleteHead(PSeqList L, int i)
{
return DeleteElem(L, 1);
}
int DeleteEnd(PSeqList L, int)
{
return DeleteElem(L, L->length);
}
int LengthList(PSeqList L)
{
return L->length;
}
int GetElem(PSeqList L, int i,ElemType* e)
{
assert(L);
if((i<1)||(i>L->length))
{
printf("输入有误,请在(%d)-(%d)范围内输入\n", 1, L->length);
return 0;
}
*e = L->data[i - 1];
printf("第%d位置的元素是%d\n", i, *e);
return 1;
}
int SearchList(PSeqList L, ElemType* e)
{
assert(L);
int k = 0;
for (k = 0; k <= L->length; k++)
{
if (L->data[k] == *e)
{
printf("在表中第%d位置\n", k + 1);
return 1;
}
}
printf("在这个表中没有这个数字");
return 0;
}
测试
void test(PSeqList L,ElemType* e)
{
InitList(L);
printf("放入1 2 3 4 5 6 7 8 9 10\n");
*e = 1;
InsertElem(L, 1, e);
*e = 2;
InsertElem(L, 1, e);
*e = 3;
InsertElem(L, 1, e);
*e = 4;
InsertElem(L, 1, e);
*e = 5;
InsertElem(L, 1, e);
*e = 6;
InsertElem(L, 1, e);
*e = 7;
InsertElem(L, 1, e);
*e = 8;
InsertElem(L, 1, e);
*e = 9;
InsertElem(L, 1, e);
*e = 10;
InsertElem(L, 1, e);
printf("此时表为\n");
PrintList(L);
printf("尝试在表中第五个位置插入44\n");
*e = 44;
InsertElem(L, 5, e);
printf("此时表为\n");
PrintList(L);
printf("删除第5个元素\n");
DeleteElem(L,5);
printf("此时表为\n");
PrintList(L);
printf("尝试在表中第4个位置插入33\n");
*e = 33;
InsertElem(L, 4, e);
printf("此时表为\n");
PrintList(L);
printf("查找5在表中哪个位置\n");
*e = 5;
SearchList(L,e );
printf("此时表为\n");
PrintList(L);
printf("查询表中第7个位置是多少\n");
GetElem(L, 7, e);
}
输出结果
放入1 2 3 4 5 6 7 8 9 10
此时表为
10 9 8 7 6 5 4 3 2 1
尝试在表中第五个位置插入44
满了,别插了此时表为
10 9 8 7 6 5 4 3 2 1
删除第5个元素
此时表为
10 9 8 7 5 4 3 2 1
尝试在表中第4个位置插入33
此时表为
10 9 8 33 7 5 4 3 2 1
查找5在表中哪个位置
在表中第6位置
此时表为
10 9 8 33 7 5 4 3 2 1
查询表中第7个位置是多少
第7位置的元素是4
请按任意键继续. . .