顺序存储结构需要三个属性
* 存储空间的起始地址:数组date,他的存储位置就是存储空间的存储位置。
* 线性表的最大存储容量:数组长度MAXSIZE。
* 线性表的当前长度:length。
这套程序能够完成对顺序链表的增删改查
#include <stdio.h>
#define OK 1
#define ERROR -1
#define TRUE 1
#define FALSE 0
typedef int Status;
#define MAXSIZE 20//存储空间初始分配量
typedef int ElemType;//类型定义符(在此假设为int)
typedef struct//定义一个结构体
{
ElemType date[MAXSIZE];
int length;
}Sqlist;
Status tiqu(Sqlist sql,int i,ElemType *e)
//在sql顺序表中提取i号元素的值并将i号元素的值赋给e
{
if(sql.length == 0 || i < 1||i>sql.length)
return ERROR;
//排除sql线性表为空,i号元素不存在的情况
*e=sql.date[i-1];
//线性表中元素是从0开始,所以第i个元素的位置位于第i-1号地址。并且赋值给e
return OK;
}
Status chaRu(Sqlist *sql,int i,ElemType e)
//在sql线性表中i号位置插入e这个元素
{
int k;
if (sql->length==MAXSIZE) {
return ERROR;
}
//判断线性表是否已经满了,如果满了则不再插入元素并输出“ERROR”。
if (i<1||i>sql->length+1) {
return ERROR;
}
if (i<=sql->length)//如果i号元素符号要求
{
for (k=sql->length-1; k>=i-1; k--)
{
sql->date[k+1] = sql->date[k];
//则执行将第i号元素之后的元素都后移一个单位。
}
}
sql->date[i-1] = e;//此时第i-1号地址存储垃圾数据,对第i个元素赋值操作。
sql->length++;//顺序表长度加一。
return OK;
}
Status ShanChu(Sqlist *sql,int t)
//在sql表中删除第i个元素的操作
{
if(sql->length==0)
return ERROR;
if(t>sql->length||t<1)
return ERROR;
//排除错误情况。
if(t<=sql->length)
{
for(int i=t;i<sql->length;i++)
{
sql->date[i-1]=sql->date[i];
}
//如果符合要求则执行从第i个元素起之后元素前移一个单位。
}
sql->length--;//顺序表长度减1。
return OK;
}
int main(int argc, const char * argv[])
{
Sqlist sql;
printf("请输入你即将输入多少个数字");
scanf("%d",&sql.length);
for(int i = 0;i<sql.length;i++)
{
scanf("%d",&sql.date[i]);
}
Sqlist *s=&sql;
for(int i=0;i<s->length;i++)
printf("%d\n",s->date[i]);
printf("一共%d个元素。\n",s->length);
printf("输入插入位置,插入元素,删除的位置\n");
ElemType a,c,e,h;
scanf("%d,%d,%d",&a,&e,&h);
printf("插入操作\n");
printf("%d\n",tiqu(sql,a,&c));
chaRu(s, a, e);
for(int i=0;i<s->length;i++)
printf("%d,%d\n",s->date[i],s->length);
printf("删除操作\n");
ShanChu(s,h);
for(int i=0;i<s->length;i++)
printf("%d,%d\n",s->date[i],s->length);
return 0;
}