目录
实验需求
(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 ; }