在知乎看了轮子哥,又加强了我对编程的热情,编程方面还是个雏,一步一步来吧。
自己理解顺序结构有几点好处,查找方便,不好之处便是删除添加移动的元素挺多的。
需要注意的两点, 删除 添加时 主要元素移动从尾还是首开始 表的是否为空及后继还有没有元素等操作是根据length来判断的。
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct List{
int *ele;
int length;
int listsize;
};
Inti(List &l)
{
l.ele=(int*)malloc(10*sizeof(int));
l.length=0;
l.listsize=10;
}
void Dest(List &l)
{
free(l.ele);
l.ele=NULL;
l.length=0;
l.listsize=0;
}
void Clear(List &l)
{
l.ele=NULL; //表清空,仅将length=0;
l.length=0;
l.listsize=10;
}
int Find(List &l,int index)
{
if(index>10||index<1)
exit(0);
return *(l.ele+index-1);
}
void insert(List &l,int x,int index){
// printf("%d ",1);
int *p;
int *q;
if(index<1||index>l.length+1) //插入
{
//printf("%d ",1);
exit(0);
}
if(l.length+1>l.listsize){
l.ele=(int*)realloc(l.ele,10*sizeof(int));
l.listsize+=10;
//printf("%d ",1);
}
p=l.ele+(index-1);
q=l.ele+l.length-1;
while(p<=q){ //只能从表尾开始移动
*(q+1)=*q;
q--;
//printf("%d ",1);
}
*(l.ele+(index-1))=x;
//printf("%d ",1);
l.length++;
}
void Delete(List &l,int index)
{
int *p;
int *q;
if(index<1||index>l.length)
exit(0);
if(l.ele==NULL)
exit(0);
p=l.ele+(index);
q=l.ele+(l.length-1);
while(p<=q){
*(p-1)=*p;
p++;
}
l.length--;
}
void print(List l)
{
for(int i=1;i<=l.length;i++)
{
printf("%d ",*(l.ele++));
}
}
bool isEmpty(List &l){
if(l.ele==NULL)
return false;
else return true;
}
bool ishave(List &l,int x) //根据length判断
{
int *temp=l.ele;
int i=0;
int k=0;
for(int i=1;i<=l.length;i++){
if(x!=*temp){
temp++;
k++;
}else break;
}
if(k>=l.length)
return false;
else return true;
}