顺序表的创建插入与删除
#include
#define maxsize 1024 //定义maxsize 是1024
#define inplen 10 //定义inplen 是10
typedefint datatype;
typedefstruct
{
datatype data[maxsize];
int last;
}sequenlist;
//创建一个顺序表并且将之初始化
sequenlist *CreatInit(void)
{
sequenlist *l;
l = new sequenlist( ); //使用动态分配sequenlist 空间大小
l->last=-1; //空表
return l;
}
//打印出顺序表
void println(sequenlist *head)
{
sequenlist *p = head;
inti = 0;
printf(" Now the squenlist is:");
for (i = 0; ilast; i++)
{
printf("%d ", p->data[i]);
}
}
//计算出顺序表的长度
int Length(sequenlist *head)
{
return head->last+1;
}
//给顺序表结点data[i]赋值
sequenlist *Setvalue(sequenlist *head)
{
inti;
sequenlist *p = head;
for (i = 0; i
{
printf("\n Input the %d value:", i + 1); //i是下标值
scanf("%d", &p->data[i]); //键盘上输入10 个结点的值
}
p->last = i-1;
//输出线性表的长度
printf("\n The length of sequenlist is %d \n",Length(p));
println(p);
return head;
}
//输入一个x 的值,并在顺序表中查找是否有此值,并返回位置序号 int Locate(sequenlist *head,int x)
{
inti = 0;
sequenlist *p=head;
while(i
last+1) //当i
{ if(p->data[i]==x) {
printf("\n The locate is %d ",i+1);
return (i+1);
}
else i++;
}
printf("\n Not Found!");//当i>节点个数,则显示出错
return 0;
}
//在顺序表中插入一个结点
sequenlist *Insert(sequenlist *head,inti,int x)
//i是节点位置,x 是结点的值
{
int j;
sequenlist *l=head;
if (l->last >= maxsize - 1) // =是考虑到顺序表恰好满了
printf("\n OverFlow!");
else
{ //表不满,插入节点
for (j = l->last; j>=i-1; j--)
l->data[j + 1] = l->data[j];
l->data[i - 1] = x;
l->last += 1;
}
return l;
}
//在顺序表中删除某个i 结点
sequenlist *Delete(sequenlist *head,inti)//i是节点序号
{
int j;
sequenlist *p=head;
if (ip->last + 1) //如果结点i 序号不在线性表中,则出错 { printf("\n ERROR!");
}
else
{ for (j = i; j
last+1; j++)
p->data[j - 1] = p->data[j];
p->last--;
}
return p;
}
int main( )
{ sequenlist *l; // L 是顺序表指针
inti=0,x=0;
l=CreatInit(); // 调用创建顺序表指针
l=Setvalue(l); //调用给顺序表结点赋值函数
printf("\n\n please input an ingeter to locate:");
scanf("%d", &x) ; //输入一个结点的值x
Locate(l,x); //调用查找结点值为x 的位置的函数
//输入一个节点的位置序号和值,输入过程中记得中间有空格 printf("\n\n please input the place and value of insertion:"); scanf("%d %d", &i,&x);
l=Insert(l,i,x); //调用在线性表中插入结点函数
println(l); //输出插入一个结点后的线性表
printf("\n\n please input the place of deletion:");
scanf("%d",&i);//输入要删除结点的位置序号
l=Delete(l,i); //调用删除结点函数
println(l); //输出删除一个结点后的线性表
return 1;
}