数据结构day3 作业 4月19

一、顺序表按元素删除

/定义结构体部分
typedef struct
{
        datatype data[MAXSIZE];//数据元素
        int len;//顺序表长度                                                     
}Seqlist,*seqlist; 
/按下标进行删除
int delete_sub(seqlist list,int sub)
{
        if(list==NULL||sub<0||empty_seqlist(list)||sub>=list->len)
        {
                printf("删除失败\n");
                return -1;
        }
        for(int i=sub;i<list->len;i++)
        {
                list->data[i-1]=list->data[i];
        }
        list->len--;
        return 0;
}


/按元素删除
int delete_element(seqlist list,datatype e)
{
        int ret=searh_element(list,e);
        if(ret==-1)
        {
                printf("删除失败\n");
                return -1;
        }
        delete_sub(list,ret);
}

二、顺序表按元素插入其后继位置

/定义结构体部分
typedef struct
{
        datatype data[MAXSIZE];//数据元素
        int len;//顺序表长度
}Seqlist,*seqlist;
/按下标进行插入
int insert_sub(seqlist list,int sub,datatype e)
{
        if(list==NULL||full_seqlist(list)||sub>list->len||sub<0)
        {
                printf("插入失败\n");
                return -1;
        }
        for(int i=list->len-1;i>=sub;i--)
        {
                list->data[i+1]=list->data[i];
        }
        list->data[sub]=e;
        list->len++;
        return 0;
}
/按元素进行插入
int insert_element(seqlist list,datatype e,datatype f)
{
        int ret=searh_element(list,e);
        if(ret==-1)
        {
                printf("插入失败\n");
                return -1;
        }
        insert_sub(list,ret+1,f);
        return 0;
}

三、顺序表排序

/定义结构体部分
typedef struct
{
        datatype data[MAXSIZE];//数据元素
        int len;//顺序表长度
}Seqlist,*seqlist;

/排序部分
int sort_bubble(seqlist list)
{
        datatype temp;
        for(int i=1;i<list->len;i++)
        {
                int count=0;
                for(int j=0;j<list->len-i;j++)
                {
                        if(list->data[j]>list->data[j+1])
                        {
                                temp=list->data[j];
                                list->data[j]=list->data[j+1];
                                list->data[j+1]=temp;
                                count++;
                        }
                }
                if(count==0)
                        break;
        }
}

四、顺序表合并

/主函数部分
 #include "fun.h"                                                                                 
  2 int main(int argc, const char *argv[])                                                           
  3 {                                                                                                
  4         seqlist list=get_space();                                                                
  5         seqlist list1=get_space();                                                               
  6         seqlist list2=get_space();                                                               
  7         int n;                                                                                   
  8         int sub;                                                                                 
  9         datatype e;                                                                              
 10         datatype f;                                                                              
 11         printf("请输入要插入给第一个顺序表的元素个数--");                                        
 12         scanf("%d",&n);                                                                          
 13         for(int i=0;i<n;i++)                                                                     
 14         {                                                                                        
 15                 printf("请输入插入的第一个顺序表的数据元素:");                                  
 16                 scanf("%d",&e);                                                                  
 17                 insert_rear(list,e);                                                             
 18         }                                                                                        
 19         output_seqlist(list);                                                                    
 20         printf("请输入要插入给第二个顺序表的元素个数--");                                        
 21         scanf("%d",&n);                                                                          
 22         for(int i=0;i<n;i++)                                                                     
 23         {                                                                                        
 24                 printf("请输入插入的第二个顺序表的数据元素:");                                  
 25                 scanf("%d",&e);                                                                  
 26                 insert_rear(list1,e);                                                            
 27         }                                                                                        
 28         output_seqlist(list1);                                                                   
 29         sort_bubble(list); //排序                                                                      
 30         sort_bubble(list1); //排序                                                                     
 31         combine_seqlist(list,list1,list2);                                                       
 32         output_seqlist(list2);                                                                   
 33         list=free_space(list);                                                                   
 34         return 0;                                                                                
 35 }    
/功能函数部分
void combine_seqlist(seqlist la,seqlist lb,seqlist lc)//结合部分
{
        int p=0,q=0,r=0;
        while(p<la->len&&q<lb->len)
        {
                if(la->data[p]<lb->data[q])
                {
                        lc->data[r]=la->data[p];
                        p++;
                        r++;
                        lc->len++;
                }
                else
                {
                        lc->data[r]=lb->data[q];
                        r++;
                        q++;
                        lc->len++;
                }
        }
        while(p<la->len)
        {
                lc->data[r]=la->data[p];
                p++;
                r++;
                lc->len++;
        }
        while(q<lb->len)
        {
                lc->data[r]=lb->data[q];
                r++;
                q++;
                lc->len++;
        }
}

int insert_rear(seqlist list,datatype e)/顺序表尾巴插入
{
        if(list==NULL||full_seqlist(list))
        {
                printf("插入失败\n");
                return -1;
        }
        list->data[list->len]=e;
        list->len++;
        return 0;
}

int output_seqlist(seqlist list)/输出部分
{
        if(list==NULL||empty_seqlist(list))
        {
                printf("输出失败\n");
                return -1;
        }
        for(int i=0;i<list->len;i++)
        {
                printf("data[%d]=%d\t",i,list->data[i]);
        }
        putchar(10);
        return 0;
}

int sort_bubble(seqlist list)/排序部分
{
        datatype temp;
        for(int i=1;i<list->len;i++)
        {
                int count=0;
                for(int j=0;j<list->len-i;j++)
                {
                        if(list->data[j]>list->data[j+1])
                        {
                                temp=list->data[j];
                                list->data[j]=list->data[j+1];
                                list->data[j+1]=temp;
                                count++;
                        }
                }
                if(count==0)
                        break;
        }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值