数据结构——顺序表(类C代码实现)
本人为在读本科大学生,能力有限。
如有错误,请联系我更正(QQ:2169788850)或在评论区留言。
代码配合严蔚敏——数据结构(c语言版)和王卓老师网课编写,完全免费,仅供学习交流使用。
由于使用教材严蔚敏——数据结构(c语言版)中的代码为类C伪代码,并不直观,本系列旨在将所有代码在电脑上实现。
使用说明
宏定义部分保存为 “hong_define.h”
其余各部分可放在“sqlist.cpp” 切记切记切记后缀是 .cpp
宏定义
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
顺序表的定义
#include"hong_define.h"
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
ElemType *data;
int length;
int listsize;
}sqlist;
顺序表的初始化
Status inisqlist(sqlist &l){
l.data =(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!l.data)exit(OVERFLOW);
l.length=0;
l.listsize=LIST_INIT_SIZE ;
return OK;
};
顺序表元素的按位查找
int getdata(sqlist &l,int i,ElemType &e){
if(i<1||i>l.length){
printf("查找位置无效\n");
return ERROR;
}
e=l.data[i-1];
printf("查找位置对应元素为%d\n",e);
return OK;
}
顺序表元素的按值查找
//存在多个相同元素,仅返回第一次出现的位置
int locatedata(sqlist &l,ElemType &e){
for(int i =0;i<l.length;i++){
if(l.data[i]==e){
printf("查找元素是顺序表中的第%d个元素\n",i+1);
return i+1;
}
}
printf("查找元素不在顺序表中\n");
return 0;
}
顺序表的长度
void listlength(sqlist &l){
printf("表的长度为%d\n",l.length);
};
顺序表元素的遍历
void viewlist(sqlist &l){
if(l.length==0){
printf("表为空\n");
}
else{printf("表中的元素有");
for(int i=0;i<=l.length-1;i++){
printf("%d\t",l.data[i]);
}
printf("\n");
}
}
顺序表元素的插入
Status insdata(sqlist &l,int i,ElemType &e){
if(i<1||i>l.length+1){
return ERROR;
}
if(l.length==LIST_INIT_SIZE){
return ERROR;
}
for(int j=l.length-1;j>=i-1;j--){
l.data[j+1]=l.data[j];
}
l.data[i-1]=e;
l.length++;
return OK;
}
顺序表元素的删除
Status dellistdata(sqlist &l,int i,ElemType &e){
if(i<1||i>l.length+1){
return ERROR;
}
e=l.data[i-1];
printf("被删除的元素是%d,它是第%d个元素\n",e,i);
for(int j=i;j<=l.length-1;j++){
l.data[j-1]=l.data[j];
}
l.length--;
return OK;
};
顺序表的销毁
Status destroylist(sqlist &l){
if(l.data){
free(l.data);
l.length=0;
l.listsize=0;
return OK;
}
else{
return ERROR;
}
}
顺序表的清空
void clearlist(sqlist &l){
l.length=0;
}
顺序表是否为空
void isemptylist(sqlist l){
if(l.length==0){
printf("表为空\n");
}
else{
printf("表不为空\n");
}
};
样例说明
int main(){
sqlist l;//声明l为顺序表
ElemType e1=1,e2=2,e3=3,e4=4,e5,e6;
inisqlist(l);//顺序表的初始化
insdata(l,1,e1);
insdata(l,2,e2);
insdata(l,3,e3);
insdata(l,4,e4);//顺序表的插入
viewlist(l);//顺序表的遍历
listlength(l);//顺序表的长度
dellistdata(l,3,e5);//顺序表元素的删除
viewlist(l);
listlength(l);
destroylist(l);//顺序表的销毁
viewlist(l);
insdata(l,1,e1);
insdata(l,2,e2);
insdata(l,3,e3);
insdata(l,4,e4);
viewlist(l);
getdata(l,2,e6);//按位查找
locatedata(l,e2);//按值查找
isemptylist(l);//判断是否为空
clearlist(l);//顺序表的清空
isemptylist(l);
}