静态顺序表的定义
将int转化为ElemType
创建队列项和队列指针SeqQueue和PSeqQueue
学习目标:
提示:了解顺序表的增删改查
学习内容:
提示:这里可以添加要学的内容
例如:
1、静态顺序表的增
2、 静态顺序表的删
3、 静态顺序表的改
4、 静态顺序表的查
5、静态顺序表的初始化
学习内容细讲:
1.初始化
备注:
1.传过来的是队列的指针
2.memset函数的用法
memest的原型:void *memest(void *s, int c, size_t n);
例:若将一个int np【10】清零,其格式为
memest(a,0, 20);
这将起到初始化的作用,即将数组全部置为0;
代码结果:
成功清零
这两种方法定义的指针p是相同的
2.增(插入)
简单思路:先在指定位置插入所要插入的元素,其之后的项再进行循环后移。
补充:memcpy函数的使用
1.函数原形式 void *memcpy(void *p1, void *p2, unsigned n);
2.简单解析:p1是目标地址,p2是源地址,n是数据长度。
3.函数作用:以p1指向的地址为起点,将连续的n个字节数据,复制到以p2指向为起点的内存中。
4.函数库:#include<memory.h>
实际步骤详解:
函数形式:
在顺序表LL的第ii个位置插入元素ee,返回值:0-失败;1-成功。
InsertList(PSeqList LL, unsigned int ii, ElemType *ee)
第一个参数为该顺序表的指针,第二个参数为要插入的地方,第三个参数为要插入变量(数)的地址(在此采用地址是为了之后插入结构体时方便)。
函数总览:
`int InsertList(PSeqList LL, unsigned int ii, ElemType *ee)
{
int kk; //for循环计数用
//判断是否为空指针
if(LL==NULL || ee==NULL)
return 0;
//判断插入点是否正确
if(LL->length>=MAXSIZE){
printf("顺序表已满,不能插入。");
return 0;
}
if(ii<1|| ii>=MAXSIZE){
printf("插入位置越界");
return 0;
}
{//该复合语句表示当插入位置正确时的操作方法
//step1循环后移
for(kk=LL->length; kk>=ii; kk--){
memcpy(&LL->data[kk] ,&LL->data[kk-1], 1);
}
LL->data[ii-1] = *ee;
LL->length++;
return 1;
}
}`
注意:
1.调用的时候如果使用PSeqlist定义的指针,前面不需要加&符号
PSeqlist p;
InsertList(p, 1, &ee);
若采用Seqlist则需要加&符号。
2.memcpy(&LL->data[kk] ,&LL->data[kk-1], 1);
一定要加&符号!!!
3.删
删的方法与增的方法几乎相同
```c
int DeList(PSeqList LL, unsigned int ii)
{
int kk; //for循环计数用
//判断是否为空指针
if(LL==NULL)
return 0;
if(ii<1|| ii>=MAXSIZE){
printf("输入位置越界");
return 0;
}
{
for (int k=ii; k<=LL->length; k++){
memcpy(&LL->data[k-1],&LL->data[k],sizeof(ElemType)); // 用数组的形式也可以。
}
LL->length--;
return 1;
}
}
注意:
1.此处不需要第三个参数。
2.注意for循环
for (int k=ii; k<=LL->length; k++){
memcpy(&LL->data[k-1],&LL->data[k],sizeof(ElemType));
}
从ii开始到小于等于length。
4.查
比较简单
直接上代码
int LocateElem(PSeqList LL, ElemType *ee)
{
if ( (LL == NULL) || (ee == NULL) ) return 0; // 检查空指针。
int kk;
for (kk = 0; kk < LL->length; kk++)
{
// 如果元素ee为结构体,这行代码要修改。
// if (*(LL->data+kk) == *ee) return kk+1; // 在表中对应序号应为kk+1。
if (LL->data[kk] == *ee) return kk+1; // 用数组的形式也可以。
}
5.改
改似乎更简单。。。