/*******date:2014.12.6*******/
#define MAXLEN 100 //定义顺序表最大长度
typedef struct
{
char key[10]; //节点关键字
char name[20];
int age;
}DATA; //定义节点类型
typedef struct //定义顺序表结构
{
DATA ListData[MAXLEN+1]; //保存顺序表的结构数组
int ListLen; //顺序表已存节点的数量
{
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); //清空输入缓冲区
顺序表:
定义:就是按照顺序存储方式存储的线性表,各 节点按照逻辑次序依次存放在计算机的一组连续的存储单元中。 只要知道了首地址以及每个数据元素所占的存储长度,就可以计算出任何一个数据元素(数据节点)的位置;
节点类型相同的情况下:基地址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); //清空输入缓冲区