线性结构的顺序存储的实现

来源:互联网 发布:php框架怎么用 编辑:程序博客网 时间:2024/05/01 10:48
#include<stdio.h>
/*
*线性结构的定义:除第一个和最后一个元素外,每个元素只有一个唯一的前驱数据元素和唯一的后继数据元素个
树型结构的定义:除根节点外,每个元素只有一个唯一的前驱数据元素可有零个或若干个后继数据元素
图型结构:每个元素可有零个或若干个前驱数据元素和零个或若干个后继数据元素
线性表:是一种最简单的线性结构,线性表的主要特点是可以在任意的位置插入和删除一个数据元素
线性表可以用顺序存储和链式存储结构存储
*/
//线性表的顺序存储的表示
#define MaxSize 100
#define true 1
#define false 0
typedef int DataType;
typedef struct{
DataType list[MaxSize];
int size;
}SeqList;
//初始化
void ListInitiate(SeqList *L){
  L->size=0;//设置初始元素的个数为0
}
//求当前数据元素个数
int  GetListLength(SeqList L){
   return L.size;//返回元素的个数
}
//插入数据元素
int ListInsert(SeqList *L,int i,DataType data){


int j;//定义变量j
if(L->size>=MaxSize){
   printf("顺序表已满,无法插入!!\n");
return false;//返回
}


if(i<0||i>L->size+1){
  printf("输入的参数不合法,不能进行插入!!\n");
  return false;//返回
}else{
    
for(j=L->size;j>=i;j--){
     L->list[j]=L->list[j-1];//移动元素
}
    L->list[i-1]=data;//赋值
L->size++;//元素个数加一
return true;
}
}
//删除数据元素
int DeleteList(SeqList *L,int i,DataType *data){
int j=0;
    if(L->size==0){
printf("线性表为空,不能执行删除操作!!\n");
return false;
}


if(i<0||i>L->size){


printf("删除的位置i不对,不能够进行删除!!\n");
return false;
}else{
*data=L->list[i-1];
for(j=i;j<L->size;j++){
   L->list[j-1]=L->list[j];
}


L->size--;
return true;
}
}
//取数据元素
int ListGet(SeqList *L,int i,DataType *data){
if(i<0||i>L->size){


printf("取的位置不正确,不能进行取值操作!!\n");
return false;
}else{
*data=L->list[i-1];
   return true;
}


}
//判断是否为空的操作
int  Empty(SeqList L){
if(L.size==0){
  return true;
}else{
  return false;
}
}
//打印所有输出的函数
void displayData(SeqList L){
int i;
for(i=0;i<L.size;i++){
   printf("%d ",L.list[i]);
}
}
/*anthor 独孤九剑
  time 2014/4/7
*/
//主函数
int main(){


int i;
int data;
SeqList L;
    ListInitiate(&L);
for(i=1;i<10;i++){
  ListInsert(&L,i,i);
}


// displayData(L);
//ListInsert(&L,5,45);
displayData(L);
printf("\n");
DeleteList(&L,5,&data);
printf("\n");
displayData(L);
printf("\n");
printf("%d %d\n",sizeof(SeqList),L.size);
return 0;
}
//顺序表的主要优点是:算法简单,内容单元利用率较高:
//主要缺点是:需要预先确定数据元素的最大个数
0 0