数据结构-c语言代码实现-顺序表的基本操作
看了严蔚敏教授的书和王道考研,结合而写的代码。
·
目录
目录
顺序表-动态分配顺序存储结构
#define Max 100 //顺序表存储空间的初始分配量
#define Increase 10 //顺序表存储空间的分配增量
#define ElemType char
typedef struct{
ElemType *Data;//存储空间基址
int Listsize;//当前数据最大存储容量
int length;//当前长度 (数据个数)
}Sq;
基本操作
1.顺序表-初始化
void ListSq_Init(Sq &L)
{
L.Data=(ElemType *)malloc(sizeof(char)*Max);//分配初始存储空间
L.Listsize =Max;//初始存储数据最大容量=100
L.length =0;//当前长度=0
if(L.Data==NULL){
printf("初始化失败\n");//存储空间分配失败,程序异常退出
exit(-1);
}
else{
printf("初始化成功\n");//存储空间分配成功
}
}
2.创建顺序表
void Listsq_Creat(Sq &L){
int n=0;
printf("请输入要创建的数据个数:");
scanf("%d",&n);//输入数据长度
getchar();
if(n>L.Listsize){//若插入数据长度> 储数据最大容量,重新分配存储空间,将其扩大
ElemType *newdata=(ElemType *)realloc(L.Data ,(n)*sizeof(ElemType));
if(!newdata){
printf("增加存储空间失败\n");//存储空间分配失败,程序异常退出
exit(-1);
}
else{
L.Data =newdata;//存储空间分配成功
L.Listsize=n;//当前数据最大存储容量=即将插入数据的总长度
printf("增加存储空间成功\n");
}
}
while(n--){
printf("输入数据:");
scanf("%c",&L.Data[L.length++]);//输入数据,每输入一个数据,数据长度+1
getchar();
}
printf("创建顺序表成功\n");
}
3.顺序表-按位插入
void ListSq_Insert(Sq &L,int pos,ElemType newval){
if((pos-1>L.length) ||(pos<1)) {//若选择插入位置不合法,或插入位置>当前数据长度 (插入位置不在表中),则插入失败,程序异常退出
printf("按位插入失败\n");
exit(-1);
}
if(L.length ==L.Listsize){
ElemType *newdata=(ElemType *)realloc(L.Data ,(L.Listsize+Increase)*sizeof(ElemType));//若当前存储空间已满,则先扩大存储空间再插入数据
if(!newdata){
printf("增加存储空间失败\n");//存储空间分配失败,程序异常退出
exit(-1);
}
else{
L.Data =newdata;//存储空间分配成功
L.Listsize+=Increase;//当前数据最大存储容量在原基础上扩大10
printf("增加存储空间成功\n");
}
}
for(int i=L.length;i>pos-1;i--){
L.Data[i]=L.Data[i-1];//将插入位后所有数据后移一位,为插入数据留个空间,以免覆盖原有数据
}
L.Data[pos-1]=newval;//插入数据
L.length++;//当前数据长度+1
printf("按位插入成功\n");
}
4.顺序表-按位删除
void ListSq_Delete(Sq &L,int pos){
if(pos<1||pos>L.length ||L.length==0){//若删除位不合法或表为空,则不能进行删除,程序异常退出
exit(-1);
}
else{
for(;pos<=L.length;pos++){
L.Data[pos-1]=L.Data[pos];//将删除位后面所有数据前移一位,覆盖删除位
}
L.length--;//当前数据长度-1
printf("按位删除成功\n");
}
}
5.顺序表-查找-按值查找位
int ListSq_Seek(Sq L,ElemType val){
int i=0;
while(i!=L.length){//将全部数据遍历
if(L.Data[i]==val){//若查找到值,则返回当前位置(下标+1)
printf("查找成功\n");
return i+1;
}
else{
i++;
continue;
}
}
printf("查找失败\n");//若数据遍历完,没有此值,则返回-1
return -1;
}
6.顺序表-清空
void ListSq_empty(Sq &L)
{
if(L.Data ==NULL) {//若表已被销毁,则清空失败
printf("清空失败\n");
exit(-1);
}
else{
while(L.length--){//若表未被销毁,将表中数据置0
L.Data[L.length]='0';
}
L.length=0;
printf("清空成功\n");
}
}
7.顺序表-判空
void ListSq_Isvoid(Sq L){
if(!L.length){//表的长度==0,则为空
printf("表为空\n");
}
else{//表长度!=0 ,则不为空
printf("表不为空\n");
}
}
8.顺序表-销毁
void ListSq_Destroy(Sq &L){
L.length=0;
free(L.Data);
printf("销毁成功\n");
}
9.顺序表-打印
void ListSq_Print(Sq L)
{
if(L.length ==0){
printf("打印失败\n");
}
else{
int i;
for(i=0;i<L.length;i++){
printf("%c ",L.Data[i]);
}
printf("打印成功\n");
}
}
代码实现结果
int main(){
Sq L;//创建顺序表
ListSq_Init(L);//初始化顺序表
ListSq_Isvoid(L);//判空
Listsq_Creat(L);//给顺序表赋值
ListSq_Print(L);//打印顺序表
ListSq_Insert(L,1,'A');//在顺序表首位插入A
ListSq_Print(L);//打印顺序表
printf("元素B所在位置:%d\n",ListSq_Seek(L,'B'));//按值‘B’查找其所在位置
ListSq_Delete(L,1);//删除第1位元素
ListSq_Print(L);//打印顺序表
ListSq_empty(L);//清空顺序表
ListSq_Destroy(L);//销毁顺序表
}

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)