数据结构笔记(一):顺序表的动态扩容、插入、删除、按值查找、按位查找操作

最后截图
下面展示一些 代码

#include <iostream>
#include<stdlib.h>
using namespace std;
#define InitSize 10//默认的最大长度


//动态分配的算法
typedef struct
{
	int *data;//指示动态分配数组的指针
	int MaxSize;//顺序表的最大容量
	int length;//顺序表的当前长度
}SeqList;



//初始化一个顺序表
void InitList(SeqList &L)
{
	L.data=(int *)malloc(InitSize * sizeof(int));//用malloc函数申请一片连续的存储空间
	L.length=0;
	L.MaxSize=InitSize;
}


//增加动态数组的长度
void IncreaseSize(SeqList &L,int len){
	int *p=L.data;
	L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
	for(int i=0;i<L.length;i++)
	{
		L.data[i]=p[i];//将数据复制到新区域
	};
	L.MaxSize=L.MaxSize+len;//顺序表最大长度增加len
		free(p);//释放原来的内存空间
}



//插入
bool InsertList(SeqList &L,int i,int e)
{
	if(i<1||i>L.length+1)//i表示位序,注意位序和数组下标的关系,位序从1开始,数组下标从0开始
		return false;
	for(int j=L.length;j>=i;j--)//将第i个元素及以后的元素后移
		L.data[j]=L.data[j-1];//最深层循环语句
	L.data[i-1]=e;//在位置i处放入e
	L.length++;//顺序表长度+1
	return true;
}





//删除
bool ListDelete(SeqList &L,int i,int &e)
{
	if(i<1||i>L.length)
		return false;
	e=L.data[i-1];//将被删除的元素赋值给e
	for(int j=i;j<L.length;j++)//将第i个位置后的元素前移
		L.data[j-1]=L.data[i];
	L.length--;//顺序表长度减一
	return true;
}



//打印
void printList(SeqList L)
{
 int i;
 for(i=0;i<=L.length-1;i++)
 {
  printf("\n顺序表第%d个数:%d\n",i+1,L.data[i]);
 }
}



//按位查找
int GetElem(SeqList L,int i)
{
	cout<<"查找到顺序表第"<<i<<"位的元素,其值为:"<<L.data[i-1]<<"\n"; 
	return L.data[i-1];
}





//按值查找
int LocateElem(SeqList L,int e)
{
	int i;
	for(i=0;i<L.length;i++)
		if(L.data[i]==e)//基本数据类型:int,char,double,float等可以直接用运算符"=="比较大小,结构类型的数据不能用"=="比较大小
			cout<<"查找到"<<e<<",在顺序表的第"<<i+1<<"位\n";
		return i+1;
}





int main()
{
	 SeqList L;//声明一个顺序表
	 InitList(L);//初始化顺序表
	 IncreaseSize(L,6);
	 InsertList(L,1,99);
	 InsertList(L,2,66);
	 InsertList(L,3,100);
	 printList(L);
	 GetElem(L,2);
	 LocateElem(L,100);
	 int e=-1;//用变量e将删除的元素带回来
	if(ListDelete(L,9,e))
		printf("已删除第3个元素,删除元素值为:%d\n",e);
		else
		printf("删除位序不合法");
	printList(L);
	 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值