2-19练习题

1. 完成白天课上的代码(顺序表的增删查改),并编写makefile进行编译。上交
2. 顺序表去重

代码:

01_sequence.c

#include <stdio.h>                                                                                             
#include <stdlib.h>                                                                                            
#include "./01_func.h"                                                                                         
//创建顺序表                                                                                                   
SeqList* create_seqList()                                                                                      
{                                                                                                              
    //让list指向顺序表                                                                                         
    SeqList* list = (SeqList*)malloc(sizeof(SeqList));                                                         
    //判断堆空间是否创建成功                                                                                   
    if(NULL == list)                                                                                           
    {                                                                                                          
        return NULL;                                                                                           
    }                                                                                                          
    list->pos = 0;                                                                                             
    return list;                                                                                               
}                                                                                                              
                                                                                                               
//增加                                                                                                         
void add_seqList(SeqList* list,datatype num)                                                                   
{                                                                                                              
    //判断顺序表是否为空                                                                                       
    if(list->pos >= N)                                                                                         
    {                                                                                                          
        printf("顺序表为满,插入失败\n");                                                                      
        return;                                                                                                
    }                                                                                                          
                                                                                                               
    //在pos位置插入数据                                                                                        
    list->data[list->pos] = num;                                                                               
    //将pos++                                                                                                  
    (list->pos)++;                                                                                             
    printf("插入成功!\n");                                                                                     
    return;                                                                                                    
                                                                                                               
}                                                                                                              
                                                                                                               
//遍历                                                                                                         
void iterate_seqList(SeqList* list)                                                                            
{                                                                                                              
    if(list->pos == 0)                                                                                         
    {                                                                                                          
        printf("顺序表为空,遍历失败!\n");                                                                     
        return;                                                                                                
    }                                                                                                          
    for(int i=0;i<list->pos;i++)                                                                               
    {                                                                                                          
        printf("遍历结果为:%d\n",list->data[i]);                                                               
    }                                                                                                          
}                                                                                                              
/*                                                                                                             
//查找表                                                                                                       
void select_seqList(SeqList* list)                                                                             
{                                                                                                              
    //判空                                                                                                     
    int n;                                                                                                     
    if(list->pos == 0)                                                                                         
    {                                                                                                          
        printf("顺序表为空,遍历失败!\n");                                                                     
        return;                                                                                                
    }                                                                                                          
    printf("请输入想要查找的整数():\n");                                                                       
    scanf("%d",&n);                                                                                            
    for(list->pos=0;list->pos<=3;list->pos++)                                                                  
    {                                                                                                          
        if(n == list->data[list->pos])                                                                         
        {                                                                                                      
            printf("找到了%d,是数组第%d位整数\n",n,list->pos);                                                 
        }                                                                                                      
                                                                                                               
    }                                                                                                          
}                                                                                                              
//删除表元素                                                                                                   
datatype delet_seqList(SeqList *list)                                                                          
{                                                                                                              
                                                                                                               
    if(list->pos == 0)                                                                                         
    {                                                                                                          
        printf("顺序表为空,遍历失败!\n");                                                                     
        return 0;                                                                                              
    }                                                                                                          
        list->pos--;                                                                                           

        num1 = list->data[list->pos];
        iterate_seqList(list);

        return num1;                                                                                                                             
}                                                                                                                                                
*/                                                                                                                                               
//任意删除以为数组元素                                                                                                                           
void delete_seqList1(SeqList* list,datatype n)                                                                                                   
{                                                                                                                                                
    if(list->pos == 0)                                                                                                                           
    {                                                                                                                                            
        printf("顺序表为空,遍历失败!\n");                                                                                                       
        return;                                                                                                                                  
    }                                                                                                                                            
                                                                                                                                                 
    if(n<0 && n>=list->pos)                                                                                                                      
    {                                                                                                                                            
        printf("输入不合法!\n");                                                                                                                 
    }                                                                                                                                            
    for(int i=n;i<list->pos-1;i++)                                                                                                               
    {                                                                                                                                            
        list->data[i] = list->data[i+1];                                                                                                         
        printf("删除成功,删除元素位置为:%d,值为%d!\n",i,list->data[i]);                                                                          
    }                                                                                                                                            
    list->pos--;                                                                                                                                 
    //遍历数组函数                                                                                                                               
//  iterate_seqList(list);                                                                                                                       
    return;                                                                                                                                      
                                                                                                                                                 
}                                                                                                                                                
/*                                                                                                                                               
                                                                                                                                                 
//输入一个位置插入数据                                                                                                                           
void insert_seqList(SeqList* list)                                                                                                               
{                                                                                                                                                
    int index,i,n;                                                                                                                               
    printf("请输入要插入的数组下标:\n");
    scanf("%d",&index);                                                                                                                          
    for(i=list->pos;i>index;i--)                                                                                                                 
    {                                                                                                                                            
        list->data[i] = list->data[i-1];                                                                                                         
    }                                                                                                                                            
    printf("请输入要插入的数据:\n");                                                                                                             
    scanf("%d",&n);                                                                                                                              
    list->data[index] = n;                                                                                                                       
    list->pos++;                                                                                                                                 
    iterate_seqList(list);                                                                                                                       
                                                                                                                                                 
    return;                                                                                                                                      
}                                                                                                                                                
                                                                                                                                                 
                                                                                                                                                 
//修改数组元素值,按下标修改                                                                                                                     
void update_seqList(SeqList* list)                                                                                                               
{                                                                                                                                                
    int i,j;                                                                                                                                     
    printf("请输入想修改的元素下标:\n");                                                                                                         
    scanf("%d",&j);                                                                                                                              
    for(i=0;i<list->pos;i++)                                                                                                                     
    {                                                                                                                                            
        if(i==j)                                                                                                                                 
        {                                                                                                                                        
            printf("请输入要修改的元素值:\n");                                                                                                   
            scanf("%d",&list->data[j]);                                                                                                          
        }                                                                                                                                        
    }                                                                                                                                            
    iterate_seqList(list);                                                                                                                       
}                                                                                                                                                
*/                                                                                                                                               
//根据数据查找位置                                                                                                                               
void select_seqList_date(SeqList* list)                                                                                                          
{                                                                                                                                                
    datatype num3;
    printf("请输入要查找的元素值:\n");
    scanf("%d",&num3);                                                                                                                           
    for(i=0;i<list->pos;i++)                                                                                                                     
    {                                                                                                                                            
        if(list->data[i]==num3)                                                                                                                  
        {                                                                                                                                        
            printf("该元素是第%d位的%d\n",i,data[i]);                                                                                            
        }                                                                                                                                        
    }                                                                                                                                            
}                                                                                                                                                
                                                                                                                                                 
//根据数据修改元素值                                                                                                                             
void update_seqList_data(SeqList* list)                                                                                                          
{                                                                                                                                                
    datatype num1,num2;                                                                                                                          
    printf("请输入要修改的元素值和准备更新的值:\n");      
    scanf("%d %d",&num1,&num2);                           
    for(i=0;i<list->pos;i++)                              
    {                                                     
        if(list->data[i] == num1)                         
        {                                                 
            list->data[i] = num2;                         
        }                                                 
    }                                                     
    iterate_seqList(list);                                
                                                          
}                                                         
                                                          
//删除重复元素,各元素仅保留一份                          
void del_seqList(SeqList* list)                           
{                                                         
    int i,j;                                              
    for(i=0;i<list->pos;i++)                              
    {                                                     
        int num2 = list->data[i];                         
        for(j=i+1;j<list->pos;j++)                        
        {                                                 
            if(list->data[j] == num2)                     
            {                                             
                delete_seqList1(list,j);                  
                j--;                                      
            }                                             
        }                                                 
    }                                                     
    iterate_seqList(list);                                
                                                          
}                                                         

01_main.c 
 

 #include <stdio.h>                                                                     
 #include "./01_func.h"                                                                 
 datatype main(int argc, const char *argv[])                                            
 {                                                                                      
     //创建一个顺序表                                                                   
     SeqList * list = create_seqList();                                                 
                                                                                        
     //从尾部插入数据                                                                   
     add_seqList(list,1);                                                               
     add_seqList(list,2);                                                               
     add_seqList(list,2);                                                               
     add_seqList(list,1);                                                               
     add_seqList(list,1);                                                               
     add_seqList(list,3);                                                               
     add_seqList(list,4);                                                               
     add_seqList(list,3);                                                               
     add_seqList(list,2);                                                               
     add_seqList(list,4);                                                               
     add_seqList(list,5);                                                               
     add_seqList(list,3);                                                               
     add_seqList(list,4);                                                               
     add_seqList(list,5);                                                               
     add_seqList(list,4);                                                               
     add_seqList(list,1);                                                               
                                                                                        
                                                                                        
                                                                                        
                                                                                        
     //遍历顺序表                                                                       
     iterate_seqList(list);                                                             
     /*                                                                                 
     select_seqList(list);                                                              
     printf("取到的数据为:%d\n",delet_seqList(list));                                   
     //任意删除以为数组元素                                                             
     printf("请输入要删除的元素位置下标:\n");                                           
     datatype n;                                                                        
     scanf("%d",&n);                                                                    
     delete_seqList1(list,n);                                                           
                                                                                        
     insert_seqList(list);                                                              
     //修改数组元素值,按下标修改                                                       
      update_seqList(list);                                                             
      */                                                                                
     //删除重复元素                                                                     
     del_seqList(list);                                                                 
                                                                                        
     return 0;                                                                          
 }                                                                                      
                                                                                        
                                                                                        
                                                                                        
                                                                                        

01_func.h

#ifndef __FUNC_H__                                                        
#define __FUNC_H__                                                        
                                                                          
#define N 16   //顺序表的容量                                             
                                                                          
//重命名变量类型,在现实中可能不是int类型,方便转换类型                   
typedef int datatype;                                                     
                                                                          
typedef struct                                                            
{                                                                         
    datatype data[N]; //顺序表                                            
    datatype pos;  //下标                                                 
}SeqList;                                                                 
                                                                          
datatype num1;                                                            
                                                                          
SeqList* create_seqList();                                                
void add_seqList(SeqList* list,datatype num);                             
void iterate_seqList(SeqList* list);                                      
//查找表                                                                  
void select_seqList(SeqList* list);                                       
datatype delet_seqList(SeqList *list);                                    
void delete_seqList1(SeqList* list,datatype n);                           
void insert_seqList(SeqList* list);                                       
//修改数组元素值,按下标修改                                              
void update_seqList(SeqList* list);                                       
//删除重复元素                                                            
void del_seqList(SeqList* list);                                          
                                                                          
                                                                          
                                                                          
#endif                                                                    
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          

01.cfg
 

Obj:=01_main.o 01_sequence.o
Target:= a.out
CC:=gcc
CAN:=-c -o                     
                               
                               
                               

makefile1
 

-include ./01.cfg

$(Target):$(Obj)
    $(CC) $^ -o $@

%.o:%.c
    $(CC) $< $(CAN) $@

.PHONY:clean
                             
clean:
    rm$(obj) $(Target)
                             
                             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值