线性表的动态操作

实验名称:线性表的动态操作

实验目的:实践线性表的动态分配,删除,查看,删除。

实验内容:使用动态分配分配线性表空间,

使用结构体定义空间大小,

使用指针,函数对线性表的插入删除。
在这里插入图片描述

#include<stdio.h>

#include<stdlib.h> 

#define OK 1

#define ERROR 0

#define MAX 100

int n;

typedef int Status;//函数类型

typedef int ElemType;//线性表动态分配顺序存储结构

初始化线性表



typedef struct{

       ElemType *elem; //存储空间基值

       int length;//当前长度 

       int listsize;//分配空间大小 

}SqlList;

 

Status Allogation(SqlList
*L)

{

         L->elem = (int
*)malloc(MAX* sizeof(int));

         if(!L->elem){

            printf("线性表创造失败!");

            exit(ERROR); 

         }

         L->length=0;

         L->listsize=MAX;

         printf("线性表创造成功。");

         return(OK); 

}

//对线性表赋值



Status Inlist(SqlList *L)

{

       int i; 

       printf("输入顺序表有多少个元素:");

         
scanf("%d",&n);

       for(i=1;i<=n;i++)

           L->elem[i-1]=i;

       L->length=n;

       return OK;

       

       

}

//输出线性表



void Print(SqlList L)

{

       

       int i;

       for(i=1;i<=L.length;i++)

         printf("%d   ",L.elem[i-1]);

        printf("\n");


}

//插入



Status Insrt(SqlList *L,int
i,int x)

{

       int j;

       if(i<1||i>L->length)

       {

              printf("插入失败!");

              return(ERROR); 

       }

       if(L->length==MAX) return ERROR;

    for(j=L->length-1;j>=i-1;j--)

    {

          L->elem[j+1]=L->elem[j];

           }

           L->elem[i-1]=x;

            L->length++; 

       }

//删除



Status Delete(SqlList *L,int
i)

{

              int j;

       if(i<1||i>L->length+1)

       {

              printf("删除失败!");

              return(ERROR); 
              

 for(j=i-1;j<L->length-1;j++)

        {

             L->elem[j]=L->elem[j+1];

        }

        L->length--;

        return OK;

        

}



       }

查看



Status Find(SqlList L,int i)


{

              int j;

       if(i<1||i>L.length+1)

       {

              printf("查找失败!");

              return(ERROR); 

              

              } 

              printf("%d",L.elem[i-1]);

              printf("\n"); 

       

 

}

主函数



int main()

{

       SqlList L;

       int i,j,n,a;

       Allogation(&L);

       Inlist(&L);

        Print(L);

        do

        {

        

        printf("输入要执行的操作 1.查看 2.删除 3.插入 4.退出:"); 

        scanf("%d",&n);

           switch(n)

           {

                 case 1:{

                            
printf("请输入要查看的位置:") ;

                            
scanf("%d",&i);

                               
Find(L, i);

                                


                            }

                                break;

                         

                 case 2:{

                         
printf("请输入要删除的位置:") ;

                            
scanf("%d",&i);

                                 
Delete(&L, i);

                                  
Print(L);

                              }

                                 
break;

                         

                     case 3:{

                               
printf("请输入要插入的位置,信息:") ;

                            
scanf("%d%d",&i,&a); 

                                    
Insrt(&L,i,a); 

                                     
Print(L);

                            }

                                        break;

                            

                 case 4:break;

           }

          
}while(n>0&&n<4);

       

          

              

       

              

        

        return 0;

       

       

       

       

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值