顺序表删除元素声明方式 声明含义 主要行为 行为代码 补充行为 行为代码 | status listdelete(sqlist *l,int i,int*e) 删除顺序表第i个元素,并且用指针保存它的值 用指针保存值 从第i个元素开始,将后一个元素向前推进一个位置 表长减一
*e=l->data[i-1];
for(int j=i;j<=l->length;j++) { l->data[j-1]=l->data[j]; }
l->length--; 线性表为空,报错 删除位置不正确,报错 if(l->length==0) return ERROR; if(i<1||i>l->length) return ERROR;
|
顺序表插入元素声明方式 声明含义 主要行为 行为代码 补充行为 行为代码 | status listinsert (sqlist* l,int i, int e) 在l的第i个元素前面插入个元素,值为e 将第i个位置及以后的元素向后推一位, 将e插入第i个位置 表长+1 for(int j=l->length-1;j>=i-1;j--) { l->data[j+1]=l->data[j]; } l->data[i-1]=e; l->length++; 线性表满了报错 插入位置错了 报错 if(l->length==MAXSIZE) return ERROR; if(i>l->length) return ERROR; |
顺序表获取元素声明方式 声明含义 主要行为 行为代码 补充行为 行为代码 | status getelem(sqlist l,int i,int*e) 用e指向l的第i个数据项的data 同上 *e=l.data[i-1]; 线性表没有数据 读取位置越界 if(l.length==0||i<1||i>l.length) return ERROR; |
完整代码:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include <string.h>
//-----------------------------
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int status;
#define MAXSIZE 20
//-----------------------------
typedef struct sqlist
{
int data[MAXSIZE];
int length;
}sqlist;
status getelem (sqlist l,int i,int *e)
{
if(l.length==0||i<1||i>l.length)
return ERROR;
*e=l.data[i-1];
return OK;
}
status listinsert(sqlist* l,int i,int e)
{
if(l->length==MAXSIZE)
return ERROR;
if(i<1||i>l->length+1)
return ERROR;
if(l->length>=i)
{
for(int k=l->length-1;k>=i-1;k--)
{
l->data[k+1]=l->data[k];
}
}
l->data[i-1]=e;
l->length++;
}
status listdelete(sqlist *l,int i,int*e)
{
if(l->length==0)
return ERROR;
if(i<1||i>l->length)
return ERROR;
*e=l->data[i-1];
for(int j=i;j<l->length;j++)
{
l->data[i-1]=l->data[i];
}
l->length--;
}
void test()
{
}
int main()
{
test();
system("pause");
return 0;
}
ps:运行不了,仅供学习了解使用