[实验一] 顺序表的基本操作

(1) 从键盘上依次输入21、18、30、75、42、55、99、35、40,创建顺序表,并输出顺序表中的各元素值(自己编写)

(2) 分别在顺序表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出顺序表中的各元素值(参考代码)

(3) 查找值为10的元素,找到返回其位序,否则返回0(自己编写)

(4) 查找顺序表中的最大元素值并输出(自己编写)

(5) 对顺序表元素进行就地逆置并输出(自己编写)

(6) 删除顺序表中的第4个数据元素和第7个数据元素,给出删除成功或失败的信息,并输出顺序表中的各元素值(参考代码)

(7) 求顺序表中所有元素的平均值并输出(自己编写)

(8) 先清空顺序表,然后销毁顺序表(自己编写)

思考:如果插入、删除元素的位置是随机输入的,待插入的元素也是随机输入的,程序可以怎么改?

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define ok 1
#define error 0
typedef struct
    {

    int a[100];
    int length;
    }sqlist,*p;
    p creatlist();
      int ListDelete(p,int);
    void ListInsert(p,int,int);
    int LocateElem(p,int);
    int MAX(p);
   void oppsite(p);
   void average(p);
   void Clearlist(p);
  int DestroyList(p);
    int main ()
    {    int e;
         int i;
         int j;
         int i1;
         int j3;
         p top;
         int s;
         int j1;
         int j2;
        top=creatlist();
        printf("请输入要在哪个位置插入第一个数(以XX,XX格式输入):");
         scanf("%d",&i1);
         scanf("%d",&j3);
        ListInsert(top, i1, j3);
        printf("请输入要在哪个位置插入第二个数(以XX,XX格式输入):");
         scanf("%d",&i);
         scanf("%d",&j);
        ListInsert(top, i, j);
        printf("请输入要查找的元素");
        scanf("%d",&e);
       s=LocateElem(top,e);
       if(s!=0)
       {printf("查找元素的值位置为:");
       printf("%d",s);
       }
       else
       printf("该元素不存在查找失败");
       int y=MAX(top);
       printf("最大元素为:");
       printf("%d\n",y);
        oppsite(top);
        printf("请输入第一个要删除元素的位置");
       scanf("%d",&j1);
       int k=ListDelete(top,j1);
       if(k)
       printf("删除元素成功");
       else
       printf("删除元素失败");
       printf("请输入第二个要删除元素的位置");
       scanf("%d",&j2);
       int k1=ListDelete(top,j2);
       if(k1)
       printf("删除元素成功");
       else
       printf("删除元素失败");
       average(top);
       Clearlist(top);
       DestroyList(top);
    }

    p creatlist()
    {
        p d;
        int k;
        d=(p)(malloc(sizeof(sqlist)));
        printf("你想要从键盘上输入几个数");
        scanf("%d",&d->length);
        if(d->length<=0)
        {printf("你输入了负数或者0");
         exit(-1);
        }
        for(k=0;k<d->length;k++)
        {
            printf("请输入第%d个数,按回车结束:  ",k+1);
            scanf("%d",&d->a[k]);
            }
            for(k=0;k<d->length;k++)
            {
            printf("第%d个数是",k+1);
            printf("%d\n",d->a[k]);
            }
             printf("\n");
            return d;
    }
    void ListInsert(p top,int i,int j)
    {
        if(top->length<=0)
		{
            printf("输入失败,长度不够");
            exit(-1);
            }
            if(top->length>=100)
            {
                printf("插入失败,数目过溢");
                exit(-1);
                }
                if(i>top->length)
                {
                    printf("插入位置大于数组的最大长度");
                    exit(-1);
                    }
                     if(i<0)
                {
                    printf("插入位置有误");
                    exit(-1);
                    }
                     int k;
                     for(k=top->length-1;k>=i;k--)
                         top->a[k+1]=top->a[k];
                         top->a[i]=j;
                         ++top->length;
                    for(k=0;k<top->length;k++)
                    {
                        printf("输出第%d个数是:",k+1);
                        printf("%d\n",top->a[k]);
                        }
                        printf("输入成功\n");
            }
           int LocateElem(p top,int e)
               {
                int t=0;
                for(;t<top->length;t++)
                if(e==top->a[t])
                    return t+1;
                 if(top->length==t)
                return error;
               }
      int MAX(p top)
       {  int max=top->a[0];
           for(int r=1;r<top->length;r++)
           if(max<top->a[r])
           max=top->a[r];
           return max;
           }
  void oppsite(p top)
{
    int b;
    for(int k=0;k<(top->length/2);k++)
    {b=top->a[k];
    top->a[k]=top->a[top->length-1-k];
    top->a[top->length-1-k]=b;
    }
	 printf("逆序后的元素为\n");
     for(int t=0;t<top->length;t++)
     printf("%d\n",top->a[t]);
    }
int ListDelete(p top,int i)
{
   if(i>top->length||i<1)
    {printf("删除位置不对,删除失败");
    return error;
      exit(-1);
    }
    else
    {
        int b;
        for(int j=1;j<=top->length;j++)
        {
              b=top->a[i-1];
        if(j==i&&i<top->length)
        {
        for(;j<top->length;j++)
        top->a[j-1]=top->a[j];
        --top->length;
         printf("删除后的剩余元素是:\n");
        for(int j=0;j<top->length;j++)
       printf("%d\n",top->a[j]);
        return ok;
        }
        }
    }
}
void average(p top)
{
    double s=0;
     for(int j=0;j<top->length;j++)
     //printf("%d",top->a[j]);
     s+=top->a[j];
	 printf("%lf",s);
     double b=s/10;
     printf("顺序表中所有元素的平均数是:");
     printf("%lf\n",b);
    }
void Clearlist(p top)
{
   for(int i=0;i<top->length;i++)
   top->a[i]=NULL;
    printf("清除顺序表元素成功");
    }

int DestroyList(p top)
{
 free(top);   /*释放malloc(或calloc、realloc)函数给指针变量分配的内存空间的函数,使用后该指针变量一定要重新指向NULL,防止野指针出现,有效 规避误操作。
*/
 printf("\n");
 printf("该线性表已经被销毁");
 exit(-1);
 return error;
    }

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值