#include <iostream>
#include <cstdlib>
#define MAXSIZE 20 //顺序表的最大长度
#define N 11
using namespace std;
/**
*实现顺序表的初始化和增删改查
*注意:该程序默认顺序表的第0个位置不用,元素从1开始存放
*/
typedef struct
{
int *elem; //存一个地址,动态分配空间
int lenth;
}Sqlist;
/****************顺序表初始化函数****************/
void initlist(Sqlist &l) //用引用
{
int nums[N]={0,1,2,3,4,5,6,7,8,9,10};
l.elem = new int[MAXSIZE]; //后面要delete
if(l.elem == NULL )
{
exit(0); //非正常退出,要引入头文件<cstdlib>
}else
{
for(int i=0;i<N;i++)
{
l.elem[i]=nums[i];
}
l.lenth=N-1;
}
}
/****************顺序表查找函数****************/
//查找到就返回元素下标位置,没找到就返回0
int Find_Sq(Sqlist &l , int e) //e是要查找的值
{
int i=1;
while(i<=l.lenth && e != l.elem[i])
i++;
if(i != l.lenth+1) //表示跳出循环,还没找到,此时i为l.lenth+1
return i;
else
return 0;
}
/****************顺序表插入函数****************/
int Inser_Sq(Sqlist &l , int pos , int num)
{
if(pos<1 || pos >l.lenth)
return 0;//插入位置错误
if(l.lenth >= MAXSIZE -1)
return 0;//空间已满,无法插入
for(int i=l.lenth ; i>=pos ; i--)
l.elem[i+1]=l.elem[i];
l.elem[pos]=num;
l.lenth++;
return 1;
}
/****************顺序表删除函数****************/
int Dele_Sq( Sqlist &l , int pos , int &e) //e保存要删掉的值,所以用引用
{
e=l.elem[pos]; //e保存要删掉的值
if(pos<1 || pos >l.lenth)
return 0;
for(int i = pos ; i<l.lenth ; i++)
l.elem[i]=l.elem[i+1];
l.lenth --;
return 1;
}
/****************顺序表打印函数****************/
void Print_Sq(Sqlist &l)
{
for(int i=1;i<=l.lenth;i++)
{
cout<<l.elem[i]<<endl;
}
}
int main()
{
/******************************************/
//初始化
Sqlist q; //创建顺序表
initlist(q); //初始化顺序表
/******************************************/
//顺序表查找元素(表中查找元素99)
int result = Find_Sq(q,99);
if(result == 0)
cout<<"没有找到"<<endl;
else
cout<<"找到了,数组下标为"<<result<<endl;
/******************************************/
//顺序表插入元素(在第三个位置插入数据666)
Inser_Sq(q , 3 , 666);
/******************************************/
//顺序表删除元素(把第5个元素删除,并把删除的值保存在e中)
int e; //接受保存将被删除的元素
Dele_Sq(q,5,e);
/******************************************/
Print_Sq(q);
delete []q.elem;
return 0;
}
C++数据结构-顺序表初始化及其增删改查
最新推荐文章于 2024-03-04 15:21:46 发布