数据结构与算法——线性表相关操作

一般,大二数据结构与算法这门课第一个实验就是这玩意儿

别看代码有点长,其实很好理解的

包含了动态数组的建立与内存释放,排序,插入,向右循环,逆置

#include<stdio.h>

#include<stdlib.h>

#define MAXSIZE 100

void BULID(int *pi,int n);

int INSERT(int *pi,int n);

void ROTATERIGHT(int *pi,int n);

void INPUT(int *pi,int n);//线性表中的数据元素都为整数

void SORT(int *pi,int n);

void INSERTSORT(int *pi,int n,int insert);

void SHOW(int *pi,int n);//输出

void SPEED(int *pi,int n,int k);//循环右移 

void REALISE(int *pi);

void INVERSE(int *pi,int n);

int main(void)

{

  

    //建立一个线性表

    //建立一个动态数组

    int *pi=NULL,length;

    pi=(int *)malloc(MAXSIZE);//线性表建立成功!!!

    //动态申请最大内存空间

    if(pi==NULL)

        exit(0);

    else

    { 

     

        printf("How many numbers do you want to enter?\n");

        scanf("%d",&length);

  BULID(pi,length);

      /* INPUT(pi,length);

        SORT(pi,length);*/

    } 

    int op;

    printf("\n1您可进行如下操作:\n1.插入数字\n2.循环右移\n3.逆置\n4.结束程序!\n请输入您要进行的操作序号:\n"); 

    do{

    scanf("%d",&op);

    switch(op)

    {

     case 1: 

   length=INSERT(pi,length);

      break;

     case 2:

   ROTATERIGHT(pi,length);

      break;

     case 3:

    INVERSE(pi,length);

          SHOW(pi,length);

       break;

     case 4: REALISE(pi);

      break;

     default:

      printf("程序暂时无法执行此操作,更多精彩请期待后期版本!");

   break; 

     

  };

  

 if(op!=4)

  printf("\n输入您想继续进行的操作:");

 }while(op!=4);

}

void BULID(int *pi,int n)

{

 /*printf("How many numbers do you want to enter?\n");

        scanf("%d",&length);*/

        INPUT(pi,n);

        SORT(pi,n);

        SHOW(pi,n);

 } 

 int INSERT(int *pi,int n)

 {

  int insert;

    printf("输入你要插入的数字:\n");

    scanf("%d",&insert);

    n++;

    INSERTSORT(pi,n,insert);

    SHOW(pi,n);

    return n;

 }

 void ROTATERIGHT(int *pi,int n)

 {

  int k;

    printf("你想向右循环移动几位?\n"); 

    scanf("%d",&k);

    SPEED(pi,n,k);

    SHOW(pi,n);

 }

//输入数据

void INPUT(int *pi,int n)

{

    for(int i=0;i<n;i++)

    {

        scanf("%d",&pi[i]);

    }

}

//按增序排序

void SORT(int *pi,int n)

{

    if(pi==NULL||n<=0)

        return;

    const int N=100;

    int TEMP[N];

    for(int i=0;i<=N;i++)

    {

        TEMP[i]=0;

    }

    for(int i=0;i<n;i++)

    {

        TEMP[pi[i]]++;

        //TEMP[pi+i]++;

    }

    int i=0,j=0;

    while(j<=N)

    {

        if(TEMP[j]!=0)

        {

            pi[i]=j;

            TEMP[j]--;

            i++;

        }

        else

            j++;

    }

    

}

//插入后排序 

void INSERTSORT(int *pi,int n,int insert)

{

// printf("%d",n);

    for(int i=0;i<n;i++)

    {

     int count=0;

        if(insert<*(pi+i))

        { 

        // printf("%d\n",*(pi+i)); 

        // count++;

  // printf("count%d++",count);

   

   for(int j=n-1;j>i;j--)

            {

               pi[j]=*(pi+j-1);

            }

           pi[i]=insert;

     return ;

        }

        

            

    }

}

//输出

void SHOW(int *pi,int n)

{

    for(int i=0;i<n;i++)

    {

        printf("%d ",*(pi+i)); 

        }

}

//循环右移k位 

void SPEED(int *pi,int n,int k)

{

 int temp;

 for(int i=0;i<k;i++)

 {

  temp=*(pi+n-1); 

  for(int j=n-1;j>0;j--)

  {

   pi[j]=*(pi+j-1);

  }

  pi[0]=temp;

 }

}

//记得释放内存空间 

void REALISE(int *pi)

{

 printf("程序运行结束,释放空间!"); 

 free(pi);

 }

//逆置   

void INVERSE(int *pi,int n)

{

 //printf("\n");

 int q[n];

 for(int i=n-1;i>=0;i--) 

  q[n-1-i]=*(pi+i);

 for(int j=0;j<n;j++)
        pi[j]=q[j];    
    //    printf("\n");                                                  
        }    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

try again!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值