C数据结构

本文详细介绍了如何使用C语言实现顺序表的创建、数据插入、删除、修改和查询功能,包括示例代码和函数实现。
摘要由CSDN通过智能技术生成

对顺序表的操作

#include <stdio.h>
#include "./sequlist.h"
int main(int argc, const char *argv[])
{
    Seqlist* sq=seqlist();//调用创建顺序表函数

    insert_seqlist(sq,100);//调用插入顺序表数据函数
    insert_seqlist(sq,200);//调用插入顺序表数据函数
    insert_seqlist(sq,89);//调用插入顺序表数据函数
    insert_seqlist(sq,45);//调用插入顺序表数据函数
    insert_seqlist(sq,30);//调用插入顺序表数据函数

    show_seqlist(sq); //调用遍历顺序表数据函数

    /*int res=delete_seqlist(sq);//调用删除顺序表数据函数
    printf("%d\n",res);*/

    delete_index(sq,2);//调用按下标位置删除数据
    show_seqlist(sq); //调用遍历顺序表数据函数

    insert_index(sq,3,67);//调用按照位置插入数据
    show_seqlist(sq); //调用遍历顺序表数据函数
                                                             
    xiugai(sq,3,78);//调用按下标位置修改数据
    show_seqlist(sq); //调用遍历顺序表数据函数
    
	chaxun(sq,3);//调用按下标查数据
	show_seqlist(sq); //调用遍历顺序表数据函数
	
	return 0;
#include <stdio.h>
#include <stdlib.h>
#include "./sequlist.h"

/*
 * function:    创建顺序表
 * @param [ in] 
 * @param [out] 
 * @return      
 */

Seqlist *seqlist(void)
{
    Seqlist *sq=(Seqlist*)malloc(sizeof(Seqlist));
    if(NULL==sq)
    {
        printf("顺序表创建失败\n");
        return NULL;
    }
    else
        printf("顺序表创建成功\n");
    //将pos初始化为0;
    sq->pos=0;//将顺序表的长度初始化为0              
    return sq;
}
/*
 * function:    插入数据
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void insert_seqlist(Seqlist* sq,dataType num)  
{
    //判断顺序表是否为满
    if(sq->pos >=N)
    {
        printf("顺序表已满,插入失败\n");
        return;
    }
    //pos位置出入数据
    sq->data[sq->pos]=num;
    //pos++
    sq->pos++;
    return;
}
/*
 * function:    遍历数据
 * @param [ in] 
 * @param [out] 
 * @return      
 */                                   
void show_seqlist(Seqlist* sq)
{
    for (int i=0;i<sq->pos;i++)
    {
        printf("%d\t",sq->data[i]);
    }
    printf("\n");
    return;
}
/*
 * function:    从尾部删除数据
 * @param [ in] 
 * @param [out] 
 * @return                                 
 */
dataType delete_seqlist(Seqlist* sq)
{
    //判断顺序表是否为空
    if(sq->pos <=0)
    {
        printf("顺序表为空,删除失败\n");
        return -1;
    }
    //pos--
    sq->pos--;
    //另存要删除的数据
    dataType num =sq->data[sq->pos];
    return num;

}

/*
 * function:    按照位置插如数据
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void insert_index(Seqlist* sq,int index,dataType num)
{
    //判断顺序表是否为满                                   
    if(sq->pos>=N)
    {
        printf("顺序表为满,插入失败\n");
        return;
    }
    //判断index是否合法
    if(index<0 && index>sq->pos)
    {
        printf("index=%d位置非法,插入失败\n",index);
        return;
    }
    //将index及其后面的数据往后移动一个位置
    for(int j=sq->pos;j>=index+1;j--)
    {
        sq->data[j]=sq->data[j-1];
    }
    //在index处位置插入数据
    sq->data[index]=num;
    //pos++
    sq->pos++;
    return;
}
/*
 * function:    按下标位置删除数据
 * @param [ in] 
 * @param [out] 
 * @return      
 */                                                             
void delete_index(Seqlist *sq,int index)
{
    //判断index是否合法
    if(index<0 && index>sq->pos)
    {
        printf("index=%d位置非法,删除失败\n",index);
        return;
    }
    //保存一下删除的数据
    printf("删除的数据:%d\n",sq->data[index]);

    //将index后面的数据往前移动,直到覆盖需要删除的数据
    for (int j=index;j<=sq->pos-2;j++)
    {
        sq->data[j]=sq->data[j+1];
    }
    //pos--
    sq->pos--;
    return;
}
/*
 * function:    按下标位置修改数据
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void xiugai(Seqlist *sq,int index,dataType num)               
{
    //判断index是否合法
    if(index<0 && index>sq->pos)
    {
        printf("index=%d位置非法,删除失败\n",index);
        return;
    }

    //原数据保存
    printf("被修改前的数据:%d\n",sq->data[index]);

    //修改数据
    sq->data[index]=num;

    //pos不变
}
/*
 * function:    按下标位置查询数据
 * @param [ in] 
 * @param [out] 
 * @return      
 */                                                             
void chaxun(Seqlist *sq,int index)
{
    //判断index是否合法
    if(index<0 && index>sq->pos)
    {
        printf("index=%d位置非法,删除失败\n",index);
        return;
    }
    //查询数据
    printf("要查询的数据:%d\n",sq->data[index]);
    //pos不变
    return;
}
 #ifndef __SEQLIST__                                                   
 #define __SEQLIST__
 
 #define N 100
 typedef int dataType;
 
 typedef struct{
     int data[N];   //定义顺序表
     int pos;           //存储顺序表长度也是要操作的元素的下标
 }Seqlist;
 Seqlist *seqlist(void);
 void insert_seqlist(Seqlist* sq,dataType num);
 void show_seqlist(Seqlist* sq);
 dataType delete_seqlist(Seqlist* sq);
 void insert_index(Seqlist* sq,int index,dataType num);
 void delete_index(Seqlist *sq,int index);
 void xiugai(Seqlist *sq,int index,dataType num);
 void chaxun(Seqlist *sq,int index);
 #endif

结果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值