数据结构线性表顺序存储C++实现
来源:互联网 发布:mac电池循环次数 cmd r 编辑:程序博客网 时间:2024/05/16 05:45
#include <iostream>
#include <stdlib.h>
using namespace std;
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define List_Init_Size 20
#define List_IncreMent 10
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType *elems;//数据元素组成的数组
int length;//元素个数
int listsize;//线性表长度
}SqList;
Status compare(ElemType e1,ElemType e2);
Status add(ElemType &e);
Status InitSqList(SqList &list);
Status DestorySqList(SqList *list_p);
Status ClearSqList(SqList &list);
Status ListEmpty(SqList list);
int LIstLength(SqList list);
Status getElem(SqList list,ElemType &e,int i);
int LocateElem(SqList list,ElemType e,Status (*compare)(ElemType e1,ElemType e2));
Status PriorElem(SqList list,ElemType cur_e,ElemType &pre_e);
Status NextElem(SqList list,ElemType cur_e,ElemType &pre_e);
Status ListInsert(SqList &list,ElemType e,int i);
Status ListDelete(SqList &list,int i,ElemType &e);
Status ListTraverse(SqList &list,Status (*add)(ElemType &e));
Status CoutSqList(SqList list);
int main(){
SqList list;
cout<<"初始化顺序线性表"<<endl;
InitSqList(list);
cout<<"顺序线性表初始化完成"<<endl;
cout<<"线性表是否为空:"<<ListEmpty(list)<<endl;
cout<<"放置数据元素1,2,3,4"<<endl;
ListInsert(list,1,0);
ListInsert(list,2,1);
ListInsert(list,3,2);
ListInsert(list,4,3);
cout<<"线性表是否为空:"<<ListEmpty(list)<<endl;
CoutSqList(list);
cout<<"线性表长度为:"<<LIstLength(list)<<endl;
ElemType e;
getElem(list,e,1);
cout<<"获取线性表第二个元素为"<<e<<endl;
cout<<"元素1在表中下标:"<<LocateElem(list,1,compare)<<endl;
cout<<"元素3在表中下标:"<<LocateElem(list,3,compare)<<endl;
ListDelete(list,2,e);
cout<<"删除表中第三个元素,此值为"<<e<<endl;
cout<<"线性表长度为:"<<LIstLength(list)<<endl;
CoutSqList(list);
cout<<"自增1"<<endl;
ListTraverse(list,add);
CoutSqList(list);
Status status;
status=PriorElem(list,1,e);
if(status)
cout<<"找到元素1前面的值为:"<<e<<endl;
else
cout<<"找不到元素1前面的值"<<endl;
status=NextElem(list,2,e);
if(status)
cout<<"找到元素2后面的值为:"<<e<<endl;
else
cout<<"找不到元素2后面的值"<<endl;
return OK;
}
Status InitSqList(SqList &list){
list.elems=(ElemType *)malloc(List_Init_Size*sizeof(ElemType));
if(!list.elems)
exit(OVERFLOW);
list.length=0;
list.listsize=List_Init_Size;
return OK;
}
Status DestorySqList(SqList *list_p){
free(list_p);
return OK;
}
Status ClearSqList(SqList &list){
list.length=0;
return OK;
}
Status ListEmpty(SqList list){
return list.length==0?TRUE:FALSE;
}
int LIstLength(SqList list){
return list.length;
}
Status getElem(SqList list,ElemType &e,int i){
if(i<0 || i>=list.length)
return ERROR;
e=list.elems[i];
return OK;
}
int LocateElem(SqList list,ElemType e,Status (*compare)(ElemType e1,ElemType e2)){
for(int i=0;i<list.length;i++){
if(compare(e,list.elems[i]))
return i;
}
return -1;
}
Status PriorElem(SqList list,ElemType cur_e,ElemType &pre_e){
for(int i=1;i<list.length;i++){
if(compare(cur_e,list.elems[i])){
pre_e=list.elems[i-1];
return OK;
}
}
return ERROR;
}
Status NextElem(SqList list,ElemType cur_e,ElemType &pre_e){
for(int i=0;i<list.length-1;i++){
if(compare(cur_e,list.elems[i])){
pre_e=list.elems[i+1];
return OK;
}
}
return ERROR;
}
Status ListInsert(SqList &list,ElemType e,int i){
if(i<0 || i>list.length){
return ERROR;
}
if(list.length==list.listsize)
list.elems=(ElemType *)realloc(list.elems,List_IncreMent*sizeof(ElemType));//扩大内存
if(!list.elems)
exit(OVERFLOW);
for(int j=list.length-1;j>i;j--){
list.elems[j+1]=list.elems[j];
}
list.elems[i]=e;
list.length++;
return OK;
}
Status ListDelete(SqList &list,int i,ElemType &e){
if(i<0 || i>list.length-1)
return ERROR;
e=list.elems[i];
for(int j=i+1;j<list.length;j++){
list.elems[j-1]=list.elems[j];
}
list.length--;
return OK;
}
Status ListTraverse(SqList &list,Status (*visit)(ElemType &e)){
for(int i=0;i<list.length;i++){
if(!visit(list.elems[i]))
return ERROR;
}
return OK;
}
Status compare(ElemType e1,ElemType e2){
return e1==e2?TRUE:FALSE;
}
Status add(ElemType &e){
e++;
return OK;
}
Status CoutSqList(SqList list){
cout<<"输出线性表"<<endl;
if(list.length==0)
cout<<"线性表为空"<<endl;
for(int i=0;i<list.length;i++)
cout<<list.elems[i]<<endl;
return OK;
}
#include <stdlib.h>
using namespace std;
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define List_Init_Size 20
#define List_IncreMent 10
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType *elems;//数据元素组成的数组
int length;//元素个数
int listsize;//线性表长度
}SqList;
Status compare(ElemType e1,ElemType e2);
Status add(ElemType &e);
Status InitSqList(SqList &list);
Status DestorySqList(SqList *list_p);
Status ClearSqList(SqList &list);
Status ListEmpty(SqList list);
int LIstLength(SqList list);
Status getElem(SqList list,ElemType &e,int i);
int LocateElem(SqList list,ElemType e,Status (*compare)(ElemType e1,ElemType e2));
Status PriorElem(SqList list,ElemType cur_e,ElemType &pre_e);
Status NextElem(SqList list,ElemType cur_e,ElemType &pre_e);
Status ListInsert(SqList &list,ElemType e,int i);
Status ListDelete(SqList &list,int i,ElemType &e);
Status ListTraverse(SqList &list,Status (*add)(ElemType &e));
Status CoutSqList(SqList list);
int main(){
SqList list;
cout<<"初始化顺序线性表"<<endl;
InitSqList(list);
cout<<"顺序线性表初始化完成"<<endl;
cout<<"线性表是否为空:"<<ListEmpty(list)<<endl;
cout<<"放置数据元素1,2,3,4"<<endl;
ListInsert(list,1,0);
ListInsert(list,2,1);
ListInsert(list,3,2);
ListInsert(list,4,3);
cout<<"线性表是否为空:"<<ListEmpty(list)<<endl;
CoutSqList(list);
cout<<"线性表长度为:"<<LIstLength(list)<<endl;
ElemType e;
getElem(list,e,1);
cout<<"获取线性表第二个元素为"<<e<<endl;
cout<<"元素1在表中下标:"<<LocateElem(list,1,compare)<<endl;
cout<<"元素3在表中下标:"<<LocateElem(list,3,compare)<<endl;
ListDelete(list,2,e);
cout<<"删除表中第三个元素,此值为"<<e<<endl;
cout<<"线性表长度为:"<<LIstLength(list)<<endl;
CoutSqList(list);
cout<<"自增1"<<endl;
ListTraverse(list,add);
CoutSqList(list);
Status status;
status=PriorElem(list,1,e);
if(status)
cout<<"找到元素1前面的值为:"<<e<<endl;
else
cout<<"找不到元素1前面的值"<<endl;
status=NextElem(list,2,e);
if(status)
cout<<"找到元素2后面的值为:"<<e<<endl;
else
cout<<"找不到元素2后面的值"<<endl;
return OK;
}
Status InitSqList(SqList &list){
list.elems=(ElemType *)malloc(List_Init_Size*sizeof(ElemType));
if(!list.elems)
exit(OVERFLOW);
list.length=0;
list.listsize=List_Init_Size;
return OK;
}
Status DestorySqList(SqList *list_p){
free(list_p);
return OK;
}
Status ClearSqList(SqList &list){
list.length=0;
return OK;
}
Status ListEmpty(SqList list){
return list.length==0?TRUE:FALSE;
}
int LIstLength(SqList list){
return list.length;
}
Status getElem(SqList list,ElemType &e,int i){
if(i<0 || i>=list.length)
return ERROR;
e=list.elems[i];
return OK;
}
int LocateElem(SqList list,ElemType e,Status (*compare)(ElemType e1,ElemType e2)){
for(int i=0;i<list.length;i++){
if(compare(e,list.elems[i]))
return i;
}
return -1;
}
Status PriorElem(SqList list,ElemType cur_e,ElemType &pre_e){
for(int i=1;i<list.length;i++){
if(compare(cur_e,list.elems[i])){
pre_e=list.elems[i-1];
return OK;
}
}
return ERROR;
}
Status NextElem(SqList list,ElemType cur_e,ElemType &pre_e){
for(int i=0;i<list.length-1;i++){
if(compare(cur_e,list.elems[i])){
pre_e=list.elems[i+1];
return OK;
}
}
return ERROR;
}
Status ListInsert(SqList &list,ElemType e,int i){
if(i<0 || i>list.length){
return ERROR;
}
if(list.length==list.listsize)
list.elems=(ElemType *)realloc(list.elems,List_IncreMent*sizeof(ElemType));//扩大内存
if(!list.elems)
exit(OVERFLOW);
for(int j=list.length-1;j>i;j--){
list.elems[j+1]=list.elems[j];
}
list.elems[i]=e;
list.length++;
return OK;
}
Status ListDelete(SqList &list,int i,ElemType &e){
if(i<0 || i>list.length-1)
return ERROR;
e=list.elems[i];
for(int j=i+1;j<list.length;j++){
list.elems[j-1]=list.elems[j];
}
list.length--;
return OK;
}
Status ListTraverse(SqList &list,Status (*visit)(ElemType &e)){
for(int i=0;i<list.length;i++){
if(!visit(list.elems[i]))
return ERROR;
}
return OK;
}
Status compare(ElemType e1,ElemType e2){
return e1==e2?TRUE:FALSE;
}
Status add(ElemType &e){
e++;
return OK;
}
Status CoutSqList(SqList list){
cout<<"输出线性表"<<endl;
if(list.length==0)
cout<<"线性表为空"<<endl;
for(int i=0;i<list.length;i++)
cout<<list.elems[i]<<endl;
return OK;
}
阅读全文
0 0
- 数据结构线性表顺序存储C++实现
- 线性表顺序存储--C实现
- 数据结构--线性表顺序存储
- 数据结构---线性表---顺序存储
- 数据结构(严蔚敏)C语言实现---线性表的顺序存储
- C语言数据结构-1.线性表之顺序存储结构
- 【数据结构】顺序存储结构线性表C语言版
- 学习笔记------数据结构(C语言版) 线性表顺序存储
- 数据结构笔记:线性表顺序存储结构(C语言)
- 数据结构(C语言)线性表 顺序存储
- 数据结构:线性表的顺序存储--Java实现
- C++实现数据结构线性表顺序存储结构
- 数据结构复习——线性表的顺序存储实现
- 线性表的顺序存储实现(陈越数据结构版)
- Java数据结构——线性表的顺序存储实现
- java实现数据结构中线性表的顺序存储
- C语言 数据结构 线性表 顺序表 线性表的顺序存储结构
- 数据结构实现顺序线性表
- 干货:FLAG的风头过后,哪一家才是最好的公司?
- iOS开发-测量APP启动耗时
- Google Play Service中安全检测API的使用说明
- 感恩节到来,还在找一个和家人聚聚朋友叙叙的地方吗?
- daterangepick时间控件双日历设置时分秒
- 数据结构线性表顺序存储C++实现
- SDUT-3378&&SDUT2040
- 格式化输出(常量练习)
- 强化学习
- 第6章 数据注解 System.ComponentModel.DataAnnotations 、注解后台原理、自定义验证ValidationAttribute、IValidatableObject
- Magento中getData和getOrigData的区别
- 零基础使用wordpress搭建个人博客
- 《PHP之正则表达式系统总结》
- ACM-ICPC 2017 Asia Qingdao-Chenchen, Tangtang and ZengZeng