2021-07-18

在这里插入图片描述静态顺序表的定义
将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.改
改似乎更简单。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值