数据结构——顺序表的顺序存储
静态实现顺序表:(增删改查)
// 静态表的缺陷 在数组存满后无法更改
// 如果声明很大的内存空间则会造成浪费
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define MaxSize 10
typedef struct
{
int data[MaxSize];
int length;
}SeqList;
// init
void InitList(SeqList * L){
L->length = 0;
for(int i = 0;i<MaxSize;i++){
L->data[i] = 0;
}
}
// add
void AddList(SeqList *L){
int flag = 1;
printf("请输入是否需要输入数据 是则输入1 否则输入0:");
scanf("%d",&flag);
int i = 0;
int e = 0;
while (flag == 1 && L->length <= MaxSize){
printf("请输入向线性表中传入的数据:\n");
scanf("%d",&e);
L->data[i] = e;
i++;
L->length++;
printf("请输入是否需要输入数据 是则输入1 否则输入0:");
scanf("%d",&flag);
}
if (L->length >= MaxSize){
printf("输入数据超出线性表的最大个数,输入失败!");
}
printf("输入结束!");
}
// insert
// 在第i-1的位置中插入元素e
bool InsertList(SeqList*L, int i, int e){
if (i>L->length+1 || L->length+1 > MaxSize){
return false;
}
for(int j = L->length;j>=i;j--){ // 出错
L->data[j] = L->data[j-1];
}
L->length++;
L->data[i-1] = e;
return true;
}
// delet
// 删除数据中第几个数据 并将删除的数据输出
// 输入的i为从1开始
bool DeletList(SeqList *L, int i, int *e){
if(i>L->length)
return false;
*e = L->data[i-1];
int j = 0;
for(j = i-1;j<L->length-1;j++){ // 出错
L->data[j] = L->data[j+1];
}
L->length--;
L->data[L->length] = 0;
return true;
}
// alter
// 将数据中第几个数据改为相应值
void AlterList(SeqList *L, int i, int e){
L->data[i-1] = e;
}
// seek
void SeekList(SeqList *L, int i){
printf("%d\n",L->data[i-1]);
}
// output
void OutputList(SeqList *L){
printf("顺序表的长度为:%d\n",L->length);
for (int i =0;i<L->length;i++){
printf("顺序表的第%d个数为:%d\n",i+1,L->data[i]);
}
}
int main(){
SeqList L;
// 2 3 4 5
int e = -1;
InitList(&L);
AddList(&L);
OutputList(&L);
printf("----------删除操作-----------\n");
DeletList(&L, 2, &e);
printf("所删除的元素为:%d\n", e);
OutputList(&L);
printf("----------插入操作-----------\n");
int value = 3;
InsertList(&L, 2, value);
OutputList(&L);
AlterList(&L, 2, 10);
OutputList(&L);
SeekList(&L, 2);
OutputList(&L);
return 0;
}
动态实现:
# include<stdio.h>
# include<stdlib.h>
# include<stdbool.h>
# define InitSize 10
typedef struct{
int *data;
int length;
int MaxSize;
}SeqList;
void InitList(SeqList *L){
// 使用malloc 申请一片连续的存储空间
L->data = (int *)malloc(InitSize*sizeof(int));
L->length = 0;
L->MaxSize = InitSize;
}
//增加动态数组的长度
void IncreaseSize(SeqList *L, int len){
int *p = L->data;
L->data = (int *)malloc((L->MaxSize+len)*sizeof(int));
for (int i =0;i<L->length;i++){
L->data[i] = p[i];
}
L->MaxSize = L->MaxSize + len;
free(p);
}
int main(){
SeqList L;
InitList(&L);
IncreaseSize(&L,5);
return 0;
}
版权声明:本文为Fools_______原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。