1_顺序表基本操作

/*******date:2014.12.6*******/ 

顺序表:

定义:就是按照顺序存储方式存储的线性表,各 节点按照逻辑次序依次存放在计算机的一组连续的存储单元中。 只要知道了首地址以及每个数据元素所占的存储长度,就可以计算出任何一个数据元素(数据节点)的位置;

节点类型相同的情况下:基地址LOC(a1);每个节点占C个存储单元;

                                       LOC(ai)=LOC(a1)+(i-1)*c     a≤i≤n;

基本操作:

准备数据:顺序表的结构;

初始化:置0;

计算表长度:节点个数;

插入节点:从头开始依次插入;后面点节点依次后移一位;

追加节点: 在末尾加节点;

删除节点:后面的节点依次前移一位;

查找节点(按序号、关键字)

显示所有节点。


#define MAXLEN 100     //定义顺序表最大长度

typedef struct
{
char key[10];     //节点关键字
char name[20];
int age;
}DATA;                //定义节点类型

typedef struct         //定义顺序表结构
{
DATA ListData[MAXLEN+1];     //保存顺序表的结构数组
int ListLen;                 //顺序表已存节点的数量

}SLType;


//初始化顺序表

void SLInit(SLType * SL)
{
SL->ListLen=0;            //初始化为空

}


//计算顺序表长度
int SLLength(SLType * SL)
{
return(SL->ListLen);         

}


//插入节点
int SLInsert(SLType * SL,int n,DATA data)
{
int i;
if (SL->ListLen>=MAXLEN)
{
printf("顺序表已满,不能插入");
return 0;
}
if (n<1||n>SL->ListLen-1)
{
printf("插入序号错误,不能插入元素");
return 0;
}
for (i=SL->ListLen;i>=n;i--)
{
SL->ListData[i+1]=SL->ListData[i];
}
SL->ListData[n]=data;
SL->ListLen++;
return 1;

}


//追加节点
int SLAdd(SLType * SL,DATA data)
{
if (SL->ListLen>=MAXLEN)
{
printf("顺序表已满,不能再添加节点了");
return 0;
}
SL->ListData[++SL->ListLen]=data;
return 1;

}


//删除节点
int SLDelete(SLType * SL,int n)
{
int i;
if (i>SL->ListLen+1||i<1)
{
printf("删除节点错误,不能删除节点");
return 0;
}
for (i=n;i<SL->ListLen;i++)
{
 SL->ListData[i]=SL->ListData[i+1];
}
SL->ListLen--;
return 1;

}


//按序号查找节点
DATA * SLFindByNum(SLType * SL,int n)
{
if (n<1||n>SL->ListLen+1)
{
printf("节点序号错误,不能反回结果");
return NULL;
}
else
return &(SL->ListData[n]);

}


//按关键字查找节点
int SLFindByCont(SLType * SL,char * key)
{
int i;
for (i=1;i<=SL->ListLen;i++)
{
if (strcmp(SL->ListData[i].key,key)==0)
{
return i;
}
}
return 0;

}


//显示所有节点
int SLAll(SLType * SL)
{
int i;
for (i=1;i<=SL->ListLen;i++)
{
printf("(%s %s %d)\n",SL->ListData[i].key,SL->ListData[i].name,SL->ListData[i].age);
}
return 0;
}


//另外,还学了一个清空操作 ---> fflush(stdin);      //清空输入缓冲区
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值