/*
静态顺序表:
以静态数组的方式存储线性表
*/
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 20
#define null NULL
typedef int Elemtype;
typedef struct {
Elemtype data[MaxSize];
int length;
}SeqList;
//初始化
bool Initlist(SeqList *L){
if(L==null){
return false;
}
int i=0;
for(;i<MaxSize;i++){
L->data[i]=null;
}
L->length=0;
return true;
}
//遍历
bool PrintList(SeqList L){
int i;
for(i=0;i<L.length;i++){
printf("%d ",L.data[i]);
}
printf("\n");
return true;
}
//按位查找,参数i为元素位置,e为返回元素.
bool GetElem(SeqList L,int i,Elemtype *e){
if(L.length<i||i<1){
return false;
}
*e=L.data[i-1];
return true;
}
//按值查找
bool LocateElem(SeqList L,Elemtype e,int *index){
int i=0;
for(i;i<L.length;i++){
if(L.data[i]==e){
*index=i+1;
return true;
}
}
*index=-1;
return false;
}
//在i的位置插入数据(前插法),后插法可转换成这个方法.
bool ListInsert(SeqList *L,int index,Elemtype e){
//判断表数据是否为满
if(L->length>=MaxSize){
return false;
}
//判断插入位置是否合法.
if(index<1||index>L->length+1){
return false;
}
int i;
for(i=L->length;i>index-1;i--){
L->data[i]=L->data[i-1];
}
L->data[index-1]=e;//这里的下标最好用输入的位置,不用循环结束的值,避免在空表的时候出现错误.
L->length++;
return true;
}
//删除
bool ListDelete(SeqList *L,int index,Elemtype *e){
//判空 判非法
if(L->length==0||index<1||index>L->length){
return false;
}
*e=L->data[index-1];
//printf("%d\n",*e);
int i;
for(i=index;i<L->length;i++){
L->data[i-1]=L->data[i];
}
L->length--;
return true;
}
//逆序
bool ReverseList(SeqList *L){
int i;
Elemtype e;
if(L->length==0||L==null){
return false;
}
for(i=0;i<=(L->length)/2;i++){
e=L->data[i];
L->data[i]=L->data[L->length-i-1];
L->data[L->length-i-1]=e;
}
return true;
}
int main(int argc, char *argv[])
{
SeqList L;
Initlist(&L);
ListInsert(&L,1,3);
PrintList(L);
int e;
ListDelete(&L,1,&e);
printf("%d",e);
if(PrintList(L)){
printf("ok");
}
/*
GetElem(L,1,&e);
printf("%d",e);
*/
return 0;
}
静态顺序表实现
最新推荐文章于 2022-09-17 15:48:09 发布