顺序表
来源:互联网 发布:csol游戏数据异常 编辑:程序博客网 时间:2024/05/23 20:20
逻辑顺序和物理顺序一致
元素相邻
用数组承载
#include<stdio.h>
#define OK 1
#define ERROR -1 //OK ERROR方便判断操作是否成功
typedef struct sqlist //typedef struct 来方便使用这种结构类型
{
int elem[100];
int length;
}Sqlist;
/*int inits(Sqlist *L) //初始化
{
L->elem=(int *)malloc(100*sizeof(int));
if(!L->elem)return ERROR;
else {L->length=0;return OK;}
}*/
int Insert(Sqlist *L,int i,int e) //插入元素 都是先判断,再操作 包括i本身,i到n-1向后移一位
{
int j;
if(i<0||L->length-1)return ERROR;
if(L->length>=100)
{
printf("线性表溢出\n");
return ERROR;
}
for(j=L->length-1;j>=i-1;--j)
L->elem[i+1]=L->elem[j];
L->elem[i-1]=e;
L->length++;
return OK;
}
int Delete(Sqlist*L,int i) //向前一位
{
int k;int x;
if(L->length==0)
{
printf("线性表为空\n");
return ERROR;
}
else if(i<=1||i>L->length)
{
printf("要删除的数据不存在\n");
return ERROR;
}
else {
x=L->elem[i-1];
for(k=i;k<L->length;k++)
L->elem[k-1]=L->elem[k];
L->length--;return(x);
}
}
int getelem(Sqlist*L,int i,int *e) //判断数据是否存在,将数据赋值给一块内存
{
if(L->length==0||i<0||i>=L->length)
return ERROR;
*e=L->elem[i-1];
return OK;
}
int main()
{
struct sqlist S=
{
{1,2,3,4,5,6},
6
};
Sqlist *L;
L=&S;
printf("表的长度%d\n",L->length);
int *element=0;int a=8;
element=&a; // 指针指向必须是合法内存
if(OK==getelem(L,2,element))
{
printf("第二个是:%d\n",*element);
}
if(OK==Insert(L,5,140))
{
printf("插入第5个正确\n");
}
if(OK==getelem(L,5,element))
{
printf("第5个是:%d\n",*element);
}
if(OK==Delete(L,4))
{
printf("删除成功\n");
}
int k;
for(k=0;k<6;k++)
{printf("输出所有数据:%d\n",L->elem[k]);}
return 0;
}
时间复杂度分析:O(n) 插入和删除都是
而查找是O(1),故优势在于快速取出任意元素- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 07. Lists & Maps
- centos 6 安装oracle 11g 要点
- 浩气之servlet总结
- 课堂总结之position的几种定位区别
- python繪畫
- 顺序表
- 课堂总结之html常用标签分类
- RecyclerView的优化:RecycledViewPool
- Palindrome Number,LeetCode
- shell sed 使用
- Easy 102题 Binary Tree Level Order Traversal
- Struts2_19_OGNL标签学习
- Medium 107题 Binary Tree Level Order Traversal II
- 结构化与面向对象的需求分析与模型设计