目录
实验需求
(1)实验任务
1.熟悉C语言的上机环境,掌握C语言的基本结构。 2.会定义线性表的顺序存储结构。 3.熟悉对顺序表的一些基本操作和具体的函数定义。
(2)输入的形式和输出值的范围
输入数字,以一串整数输入,以?为结尾; 输出线性表的内容和长度。
(3)程序需达到的功能
线性表的创建、插入指定的值及位置、删除指定元素、查找指定元素、查找指定序位的值、查询线性表的长度、打印线性表、清空线性表。 (4)正确的输入:54321
正确的输出结果:你建立的I贿表为:5->4->3->2->1
(4)问题描述
当我们要在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。反之,欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置。
代码实现
#include <stdio.h>
#include <stdlib.h>
# define MaxSize 100
typedef struct {
int *elem; //指向数据元素的基地址
int length; //线性表的当前长度
} SqList;
int InitList_Sq(SqList * L)
{
L->elem=(int*)malloc(4*100);
if(!L->elem) exit(-1);
L->length=0; //空表长度为0
return 1;
}
int CreateList_Sq(SqList * L,int n)
{
//int c;
for(int i=0;i<n;i++){
// scanf("%d",&c);
//L.elem[i]=c;
scanf("%d",&L->elem[i]);
L->length++;
}
return 0;
}
int ListInsert_Sq(SqList * L , int n, int e)
{
int i;
for(i=L->length-1;i>=n;i--)
{
L->elem[i+1]=L->elem[i];
}
L->elem[i]=e;
++L->length;
return 0;
}
void TraverseList_Sq(SqList * L)
{
for(int k=0;k<=L->length-1;k++){
if(k==0){
printf("%d",L->elem[k]);
}
if(k!=0){
printf(",%d",L->elem[k]);
}
}
}
void DestroyList_Sq(SqList * L )
{
if (L->elem)
free (L->elem) ; //释放存储空间*/
/*for (int i=0;i<n;i++)
{
free (L.elem);
}*/
}
int main()
{
SqList L;
int n,i,e;
//scanf("%d%d%d",&n,&i&e);
scanf("%d",&n);
InitList_Sq(&L);
CreateList_Sq(&L,n);
TraverseList_Sq(&L);
printf("\n");
scanf("%d",&i);
scanf("%d",&e);
ListInsert_Sq (&L,i,e);
TraverseList_Sq(&L);
DestroyList_Sq(&L );
return 0 ;
}