#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define InitSize 10 //默认的最大长度
typedef struct{
int *data; //指示动态分配数组的指针
int MaxSize; //顺序表的最大容量
int length; //顺序表的当前长度
}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;//顺序表最大长度增加len
free(p); //释放原来的内存空间
}
//插入操作
bool ListInsert(SeqList &L,int i,int e){
if(i<1||i>L.length+1){
return false;
}
if(L.length>=L.MaxSize){
return false;
}
for(int j=L.length;j>=i;j--){
L.data[j]=L.data[j-1];
}
L.data[i-1]=e; //把腾出的空间插入元素e
L.length++;
return true;
}
//删除操作
bool ListDelete(SeqList &L,int i,int &e) {
if(i<1||i>L.length){
return false;
}
e=L.data[i-1];
for(int j=i;j<L.length;j++){
L.data[j-1]=L.data[j];
}
L.length--;
return true;
}
//按值查找顺序表,找到第一个元素值等于e的位序并返回其位序
int LocateElem(SeqList L, int e) {
int i;
for (i = 0; i < L.length; i++)
if (L.data[i]==e)
return i + 1;
return 0;
}
int main(){
int e;
SeqList L; //声明一个顺序表
InitList(L); //初始化顺序表
IncreaseSize(L,5);
//插入元素
printf("请输入:\n");
for(int i = 0; i < L.MaxSize; i++){
scanf("%d",&e);
ListInsert(L,i,e); //(顺序表,位序,插入值);
}
//依次输出顺序表中的元素
for (int i = 0; i < L.length; i++) {
printf("data[%d]=%d\n", i, L.data[i]);
}
//按值查找
printf("已找到,6在顺序表中的第:%d位\n", LocateElem(L, 6) );
//删除操作
ListDelete(L,3,e);//(顺序表,位序,返回的被删除的元素)
printf("删除元素值为:%d\n",e);
return 0;
return 0;
}
输出:
不懂请留言,谢谢!