数据结构--顺序表

该文章提供了一个C语言实现的顺序列表(SQList2)的数据结构,包括创建、判满、判空、插入、删除、打印、查找、清空、摧毁、逆序打印和从小到大排序等操作的函数定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

头文件

#ifndef _SQLIST2_H_
#define _SQLIST2_H_
#include <stdio.h>
#include <stdlib.h>

typedef char data_t;
#define N 1024

typedef struct sqlist2{
    data_t buff[N];
    int len;
} sq_node,*sq_pnode;
//创建序列表
sq_pnode create_sqlist();
//判满
int full_sqlist(sq_pnode L);
//判空
int empty_sqlist(sq_pnode L);
//插入
int insert_sqlist(sq_pnode L,int pos,data_t data);
//打印
 int show_sqlist(sq_pnode L);
//删除
int delete_sqlist(sq_pnode L,int pos);
//根据元素找位置
int search_sqlist(sq_pnode L,data_t data);
//根据位置找元素
data_t search2_sqlist(sq_pnode L,int pos);
//清空
int clear_sqlist(sq_pnode L);
//摧毁
int destory_sqlist(sq_pnode *L);
//逆序打印
int revers_show_sqlist(sq_pnode L);
//从小到大排序
int small_large_sqlist(sq_pnode L);

功能代码

#include "sqlist2.h"

//创建序列表
sq_pnode create_sqlist()
{
    sq_pnode L = (sq_pnode)malloc(sizeof(sq_node));
    if(NULL == L)
    {
        printf("creat is error\n");
        return 0;
    }
    L->len=0;
    return L;
}
//判满
int full_sqlist(sq_pnode L)
{
    if(NULL == L)
    {
        printf("creat is error\n");
        return 0;
    }
    if(N == L->len)
        return 1;
    else
        return 0;
}

//判空
int empty_sqlist(sq_pnode L)
{    
    if(NULL == L)
    {
        printf("creat is error\n");
        return 0;
    }
    if(0 == L->len)
        return 1;
    else
        return 0;
}

//插入
int insert_sqlist(sq_pnode L,int pos,data_t data)
{    
    if(NULL == L)
    {
        printf("creat is error\n");
        return 0;
    }
    if(1 == full_sqlist(L))
    {
        printf("L is full\n");
        return 0;
    }
    if(pos<0 || pos>N)
    {
        printf("pos is error\n");
        return 0;
    }
    int i;
    for(i=L->len-1; i>=pos; i--)
    {
        L->buff[i+1]=L->buff[i];
    }
    L->buff[pos]=data;
    L->len++;
    return 0;
}

//打印
 int show_sqlist(sq_pnode L)
{    
    if(NULL == L)
    {
        printf("creat is error\n");
        return 0;
    }
    if(1 == empty_sqlist(L))
    {
        printf("L is empty\n");
        return 0;
    }
    int i;
    for(i=0;i<=L->len-1;i++)
    {
        printf("buff[%d]=%c\n",i,L->buff[i]);
    }
    return 0;
}

//删除
int delete_sqlist(sq_pnode L,int pos)
{
    if(NULL == L)
    {
        printf("creat is error\n");
        return 0;
    }
    if(1 == empty_sqlist(L))
    {
        printf("L is empty\n");
        return 0;
    }
    if(pos<0 || pos>L->len)
    {
        printf("pos is error\n");
        return 0;
    }
    int i;
    for(i=pos;i<L->len-1;i++)
    {
        L->buff[i]=L->buff[i+1];
    }
    L->len--;
    return 0;

}

//根据元素找位置
int search_sqlist(sq_pnode L,data_t data)
{    
    if(NULL == L)
    {
        printf("creat is error\n");
        return 0;
    }
    if(1 == empty_sqlist(L))
    {
        printf("L is empty\n");
        return 0;
    }
    int i;
    for(i=0;i<L->len;i++)
    {
        if(data == L->buff[i])
        {
            return i;
        }
    }
    printf("无此元素\n");
}

//根据位置找元素
data_t search2_sqlist(sq_pnode L,int pos)
{    
    if(NULL == L)
    {
        printf("creat is error\n");
        return 0;
    }
    if(1 == empty_sqlist(L))
    {
        printf("L is empty\n");
        return 0;
    }
    if(pos<0 || pos>L->len)
    {
        printf("pos is error\n");
        return 0;
    }
    return L->buff[pos];

}
//清空
int clear_sqlist(sq_pnode L)
{    
    if(NULL == L)
    {
        printf("creat is error\n");
        return 0;
    }
    if(1 == empty_sqlist(L))
    {
        printf("L is empty\n");
        return 0;
    }
    L->len=0;
    return 0;
}
//摧毁
int destory_sqlist(sq_pnode *L)
{    
    if(NULL == *L)
    {
        printf("L is NULL\n");
        return 0;
    }
    free(*L);
    *L=NULL;
    return 0;
}
//逆序打印
int revers_show_sqlist(sq_pnode L)
{    
    if(NULL == L)
    {
        printf("creat is error\n");
        return 0;
    }
    if(1 == empty_sqlist(L))
    {
        printf("L is empty\n");
        return 0;
    }
    int i;
    for(i=L->len-1;i>=0;i--)
    {
            printf("buff[%d]=%c\n",i,L->buff[i]);
    }
    return 0;
}
//从小到大排序
int small_large_sqlist(sq_pnode L)
{    
    if(NULL == L)
    {
        printf("creat is error\n");
        return 0;
    }
    if(1 == empty_sqlist(L))
    {
        printf("L is empty\n");
        return 0;
    }
    int i,j;
    data_t ch[10];
    for(i=L->len-1;i>=0;i--)
    {
        for(j=0;j<i;j++)
        {
            if(L->buff[j]>L->buff[j+1])
            {
                *ch=L->buff[j];
                L->buff[j]=L->buff[j+1];
                L->buff[j+1]=*ch;
            }
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值