数据结构
目录
5,数据的插入:首先从数据的最后一个开始依次向后移动一个地址直到满足要插入的位置为止。
7, 删除某个元素:将要删除的元素的位置的后一个元素向左移动一个位置即可。
数据结构:就是根据需要存储的数据,选择具体的逻辑结构与存储结构⽤来 存储数据。
一,线性表
概念:在存储的数据程序中,数据之间存在着一定的先后顺序的结构就叫做线性表。
特点:
①:有唯一的第一个元素,也只有唯一的最后一个元素
②:元素之间有先后顺序。
③:中间数据有且只有一个前驱和后继。
二,顺序表
概念:用来存储具有先后顺序的数据。
1, 顺序表的声明:
//声明类型 顺序表
struct list
{
int data[10];
int num;
};
~
~
2, 顺序表的创建:
struct list
{
int data[10];
int num;
};
//创建顺序表
struct list * create()
{
struct list *slist = malloc(sizeof(struct list)) //申请空间,创建顺序表。
slist->num = 0; //->代表的含义是指针访问数据。 设置当前存储的数据为0个。
return slist;
}
3, 判断顺序表中的数据是否存满。
struct list
{
int data[10];
int num;
};
//创建顺序表
struct list * create()
{
struct list *slist = malloc(sizeof(struct list)) //申请空间,创建顺序表。
slist->num = 0; //->代表的含义是指针访问数据。 设置当前存储的数据为0个。
return slist;
}
//判断顺序表中的数据是否存满。
int full(struct list *p) //访问数据地址中的数据
{
if (p->num==10)
{
printf("FULL");//如果顺序表中的数据满了则返回1.
return 1;
}
else
{
return 0; //如果顺序表中的数据没满则返回0.
}
}
4, 数据的添加:
//声明类型 顺序表
struct list
{
int data[10];
int num;
};
//创建顺序表
struct list * create()
{
struct list *slist = malloc(sizeof(struct list)) //申请空间,创建顺序表。
slist->num = 0; //->代表的含义是指针访问数据。 设置当前存储的数据为0个。
return slist;
}
//数据的添加
void add(struct list *p ,int age) //,int age 代表着在顺序表末尾插入一个数据。
{
p->data[p->num] = age; //首先访问data这个数据再在其后追加一个数据。
p->num++; //个数加一个
}
//函数的调用
int main()
{
struct list * head = create();//head指向顺序表
add(head,需要添加的元素)
}
5,数据的插入:首先从数据的最后一个开始依次向后移动一个地址直到满足要插入的位置为止。
//插入一个数据
void insert (struct list *p,int age,int pos) //定义pos 为元素的下标。
{
//首先判断数据是否存满
if( full(p) )
return ;
//其次判断插入下标在不在已经存储的位置上
if(pos > p->num-1)
{
printf("pos is error\n");
return ;
}
for (int i=p->num-1;i>=pos;i--) //首先遍历这个空间,多次循环,直到找到满足条件的数据
{
p->data[i+1]=p->data[i]; //找到要插入的位置在这个位置插入要插入的语句。
}
p->data[pos]=age;
p->num++;
}
//函数的调用
int main()
{
struct list * head = create();//head指向顺序表
insert(head,需要插入的地址下标,需要插入的元素)
}
6,判断数据是否为空
//判断数据是否为空
int empty(struct list *p)
{
if(p->num == 0) //判断有无数据存在。
{
printf("is empty\n");
return 1; //如果数据不存在则返回为1
}
else
return 0; //如果数据存在则返回为0
}
7, 删除某个元素:将要删除的元素的位置的后一个元素向左移动一个位置即可。
//判断数据是否为空
int empty(struct list *p)
{
if(p->num == 0) //判断有无数据存在。
{
printf("is empty\n");
return 1; //如果数据不存在则返回为1
}
else
return 0; //如果数据存在则返回为0
}
void del(struct list * p,int pos)
{
//要删除数据首先得确定数据不能为空
if( empty(p) )
return ;
//其次删除的位置要存在
if(pos > p->num-1)
{
printf("pos is error\n");
return ;
}
//删除
printf("delete age is %d\n",p->data[pos]); //打印要删除的数据元素。
for(int i = pos;i < p->num-1;i++) //利用for循环访问整个数据找到要删除的数据元素的下标地址,找到后直接将要删除的数据元素的后一个元素的地址与前一个元素地址相接,就实现了数据的删除。
{
p->data[i] = p->data[i+1];
}
p->num--; //删除一个元素后整个数据的值就会减少一个,所以要执行操作。
}
//函数的调用
int main()
{
struct list * head = create();//head指向顺序表
del(head,需要删除的元素地址下标)
}
8, 修改某个元素:利用下标直接更改
//修改某个元素
void update(struct list *p ,int age,int pos) //先定义一个修改的元素为age
{
//要修改某个元素首先的确定改元素的位置要存在
if(pos > p->num-1)
{
printf("pos is error\n");
return ;
}
p->data[pos] = age; //确定了元素存在直接利用下标修改该值。
}
//函数的调用
int main()
{
struct list * head = create();//head指向顺序表
updata(head,当前需要被修改的元素的下标,需要修改后的元素下标)
}
9,查找元素:通过循环语句进行判断
//查找某个元素
void search(struct list * p,int age)
{
for(int i = 0;i < p->num;i++) //访问整个数据
{
if(p->data[i] == age) //判断这个数据是否是当前这个元素,如果是则结束循环,如果都没有这个数据那么则显示没这个数据元素。
{
printf("pos is %d age is %d\n",i,p->data[i]);
return;
}
}
printf("have no age\n");
}
//函数的调用
int main()
{
struct list * head = create();//head指向顺序表
search(head,需要查找的元素)
}
10,显示整个顺序表
//显示整个顺序表
void show(struct list *p)
{
for(int i = 0;i < p->num;i++)
{
printf("%d ",p->data[i]);
}
printf("\n");
}
//函数的调用
int main()
{
struct list * head = create();//head指向顺序表
show(head);
}