顺序表
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#define InitSize 10
typedef struct{
int *data;
int MaxSize;
int Length;
}SeqList;
void InitList(SeqList &L){
L.data=(int *)malloc(InitSize*sizeof(int));
L.Length=0;
L.MaxSize = InitSize;
}
void WriteList(SeqList &L){
printf("请输入你要创建的长度:");
scanf("%d",&L.Length);
printf("请输入你要放的元素个数%d\n",L.Length);
for(int i=0;i<L.Length;i++)
scanf("%d",&L.data[i]);
}
void IncreaseSize(SeqList &L,int len){
int *p = L.data;
L.data = (int *)malloc((InitSize+len)*sizeof(int));
for(int i=0;i<L.Length;i++){
L.data[i] = p[i];
}
L.MaxSize = L.MaxSize+len;
printf("顺序表的长度为:%d\n",L.MaxSize);
free(p);
}
bool GetElem(SeqList &L){
int i;
printf("你要查找的第几个元素:");
scanf("%d",&i);
if(i<1 || i>L.Length){
printf("查询失败");
return false;
}
printf("第%d个元素是%d\n",i,L.data[i-1]);
return true;
}
void LocalElem(SeqList &L){
int e;
int k=1;
printf("输入你想要查找的元素");
scanf("%d",&e);
for(int i=0;i<L.Length;i++){
if(L.data[i]==e){
printf("找到啦,第%d\n",i+1);
k=0;
break;
}
}
if(k)
printf("找不到元素%d\n",e);
}
bool ListInsert(SeqList &L){
int i,e;
printf("输入你要插入的位置和元素:");
scanf("%d %d",&i,&e);
if(i<1 || i>L.Length+1){
printf("下标越界\n");
return false;
}
if(L.Length>L.MaxSize){
printf("已满\n");
return false;
}
for(int j=L.Length;j>=i;j--){
L.data[j] = L.data[j-1];
}
L.data[i-1] = e;
L.Length++;
printf("插入的元素是%d,位置是%d\n",e,i);
return true;
}
bool ListDelete(SeqList &L){
int i,e;
printf("输入要删除的元素位置:");
scanf("%d",&i);
if(i<1 || i>L.Length+1){
printf("下标越界");
return false;
}
if(!L.data){
printf("空表");
return false;
}
e = L.data[i-1];
for(int j=i;j<L.Length;j++){
L.data[j-1] = L.data[j];
}
L.Length--;
printf("删除元素%d\n",e);
return true;
}
bool PrintList(SeqList &L){
if(!L.data){
printf("空表");
return false;
}
printf("顺序表里的元素有:");
for(int i=0;i<L.Length;i++)
printf("%d ",L.data[i]);
printf("\n");
return true;
}
int Length(SeqList &L){
if(L.Length==0) return 0;
return L.Length;
}
void DestoryList(SeqList &L){
char a;
getchar();
printf("是否进行销毁:");
scanf("%c",&a);
if(a=='Y'){
L.Length=0;
L.MaxSize=0;
free(L.data);
printf("已经销毁");
}
}
void ReverseList(SeqList &L){
printf("反转后的顺序表");
int temp;
for(int i=0;i<L.Length/2;i++){
temp = L.data[i];
L.data[i] = L.data[L.Length-i-1];
L.data[L.Length-i-1] = temp;
}
}
int main(){
int len;
SeqList L;
InitList(L);
WriteList(L);
PrintList(L);
IncreaseSize(L,2);
ListInsert(L);
PrintList(L);
ListDelete(L);
PrintList(L);
LocalElem(L);
PrintList(L);
GetElem(L);
PrintList(L);
ReverseList(L);
PrintList(L);
len = Length(L);
printf("顺序表的有效长度为:%d\n",len);
DestoryList(L);
return 0;
}