顺序表结构是指一块地址连续的存储空间依次存储数据元素
可以把顺序表看成一支队伍,执行插队,或者一个人出队这些操作就是顺序表的插入和删除操作
插入操作就是和插队一样,小明要插队,那么这个位置和后面的同学都要向后移动一个位置空出来这个位置,小明才能挤进去
/*往顺序表中插入数据,list表示顺序表,loc表示把元素插入到哪个位置,num表示要插入的元素*/
void insert(List *list, int loc, int num){
if (loc < 0 || loc>list->length) {//判断loc的值是否符合要求
return;
}
else {
for (int i = list->length; i > loc; i--) {
list->data[i] = list->data[i - 1];//将要插入位置的元素及其以后所有元素向后移动一位
}
list->data[loc] = num;//将顺序表loc位置赋值为num
list->length++;//顺序表长度+1
}
}
删除操作就和出队一样,小明正在排队,突然肚子痛要去厕所,小明走了,空出来这个位置,这个位置以后所有同学都要向前一个位置,来填补这个空位
1. 首先检查要删除的位置是否合法
2. 将要删除的这个元素保存下来
3. 将这个位置以后的所有元素整体向前移动一位,覆盖这个位置的元素
4. 顺序表长度-1
/*从线性表中删除元素,loc表示删除的位置,temp表示删除的元素*/
int delete(List *list, int loc, int *temp){
if (loc < 0 || loc>list->length-1) {
return 0;
}
else {
*temp = list->data[loc];
for (int i = loc; i < list->length - 1; i++) {
list->data[i]= list->data[i + 1];//将要删除位置以后所有元素向前移动一位
}
list->length--;//顺序表长度-1
return 1;
}
}
/*找出elem在顺序表中的位置*/
int locateElem(List *list, int elem) {
int i = 0;
while (i < list->length - 1 && list->data[i] != elem) {//当出界或者找到这个元素结束循环
i++;
}
if (i >= list->length) {
return 0;
}
else {
return i;
}
}
/*取顺序表位置为loc的元素值*/
int getElem(List *list, int loc) {
if (loc<0 || loc>list->length - 1) {
printf("取数位置超出界限");
return 0;
}
else {
return list->data[loc];
}
}
#include<stdio.h>
#define SIZE 10
/*顺序表结构*/
typedef struct{
int data[SIZE];//数据存储数组
int length;//顺序表目前的长度,初始值为0
}List;
/*往顺序表中插入数据,list表示顺序表,loc表示把元素插入到哪个位置,num表示要插入的元素*/
void insert(List *list, int loc, int num){
if (loc < 0 || loc>list->length) {//判断loc的值是否符合要求
return;
}
else {
for (int i = list->length; i > loc; i--) {
list->data[i] = list->data[i - 1];//将要插入位置的元素及其以后所有元素向后移动一位
}
list->data[loc] = num;//将顺序表loc位置赋值为num
list->length++;//顺序表长度+1
}
}
/*从线性表中删除元素,loc表示删除的位置,temp表示删除的元素*/
int delete(List *list, int loc, int *temp){
if (loc < 0 || loc>list->length-1) {
return 0;
}
else {
*temp = list->data[loc];
for (int i = loc; i < list->length - 1; i++) {
list->data[i]= list->data[i + 1];//将要删除位置以后所有元素向前移动一位
}
list->length--;//顺序表长度-1
return 1;
}
}
/*取顺序表位置为loc的元素值*/
int getElem(List *list, int loc) {
if (loc<0 || loc>list->length - 1) {
printf("取数位置超出界限");
return 0;
}
else {
return list->data[loc];
}
}
/*找出elem在顺序表中的位置*/
int locateElem(List *list, int elem) {
int i = 0;
while (i < list->length - 1 && list->data[i] != elem) {//当出界或者找到这个元素结束循环
i++;
}
if (i >= list->length) {
return 0;
}
else {
return i;
}
}
/*输出顺序表中的所有元素*/
void display(List *list) {
for (int i = 0; i < list->length; i++) {
printf("顺序表中的元素为%d\n", list->data[i]);
}
}
int main()
{
List list;
list.length = 0;
insert(&list, 0, 1);
insert(&list, 1, 2);
insert(&list, 2, 3);
insert(&list, 3, 4);
insert(&list, 4, 5);
display(&list);
int temp = 0;
delete(&list, 2, &temp);
printf("删除的元素为%d\n", temp);
display(&list);
int loc = locateElem(&list, 4);
printf("元素4所在顺序表的位置为第%d个", loc);
return 0;
}
原文地址:http://blog.csdn.net/ttf1993/article/details/45601465