实现基于静态数组的顺序表的以下基本操作: 1. 初始化 2. 尾插 3. 尾删 4. 头插 5. 头删 6. 读任意位置元素 7. 修改任意位置元素 8. 查找指定元素值的下标 9

seqlist.h
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#pragma once 

#define SeqListArrMax 100

typedef char SeqListType;
typedef struct SeqList
{
    SeqListType SeqListArr[SeqListArrMax];
    size_t size;
} SeqList;

void SeqListInit(SeqList *seqlist) ;//初始化顺序表

void SeqListPrint(SeqList *seqlist,char *c);  //打印顺序表

void SeqListPushEnd(SeqList *seqlist,SeqListType value);//尾插

void SeqListPopEnd(SeqList *seqlist);//尾删

void SeqListPushStart(SeqList *seqlist ,SeqListType value); //头插

void SeqListPopStart(SeqList *seqlist);//头删

void SeqListRead(SeqList *seqlist ,size_t pos);  //读取元素信息

void SeqListSet(SeqList *seqlist ,size_t pos,SeqListType value);//修改元素信息

void SeqListSetPos(SeqList *seqlist ,SeqListType value); //查找元素下标

void SeqListPushPos(SeqList *seqlist ,size_t pos,SeqListType value ) ; //任意下标插入元素
seqlist.c
#include<stdio.h>
#include"seqlist.h"
#include<assert.h>
//初始化顺序表
void SeqListInit(SeqList *seqlist)
{
    assert(seqlist);
    seqlist->size = 0;
}

//打印顺序表
void SeqListPrint(SeqList *seqlist,char *ch)
{
    assert(seqlist);
    int i = 0;
    printf("%s\n",ch);
    for (i = 0;i<seqlist->size;i++)
    {
        printf("下标为%d的元素为%c\n",i,seqlist->SeqListArr[i]);
    }
    printf("size = %d \n",seqlist->size);
}

//尾插
void SeqListPushEnd(SeqList *seqlist,SeqListType value)
{
    assert(seqlist);
    if (seqlist->size >= SeqListArrMax)
    {
        printf("顺序表已满!\n");
    }
    seqlist->SeqListArr[seqlist->size] = value;
        seqlist->size++;
}

//尾删
void SeqListPopEnd(SeqList *seqlist)
{
    assert(seqlist);
    if (seqlist->size == 0)
    {
        printf("空顺序表!\n");
        return;
    }
    seqlist->size--;
}

//头插
void SeqListPushStart(SeqList *seqlist,SeqListType value)
{
    assert(seqlist);
    if (seqlist->size >= SeqListArrMax)
    {
        printf("顺序表已满!\n");
            return ;
    }
    int i = seqlist->size;
    for (;i>0;i--)
    {
        seqlist->SeqListArr[i+1] = seqlist->SeqListArr[i];
    }
        seqlist->SeqListArr[0] = value;
        seqlist->size++;
}

//头删
void SeqListPopStart(SeqList *seqlist)
{
    assert(seqlist);
    if (seqlist->size == 0)
    {
        printf("空顺序表!\n");
        return;
    }
    int i = 0; 
    for (i = 0;i<seqlist->size-1;i++)
    {
        seqlist->SeqListArr[i] = seqlist->SeqListArr[i+1];
    }
       seqlist->size--;
}

//读取信息
void SeqListRead(SeqList *seqlist,size_t pos)
{
    assert(seqlist);
    if(pos >= seqlist->size)
    {
        printf("输入有误!\n");
        return;
    }
    printf("该元素为 %c \n",seqlist->SeqListArr[pos]);
}

//修改信息
void SeqListSet(SeqList *seqlist ,size_t pos,SeqListType value)
{
    assert(seqlist);
    if (pos>=seqlist->size)
    {
        printf("输入有误!\n");
        return;
    }
    seqlist->SeqListArr[pos] = value;
}

//查找下标
void SeqListSetPos(SeqList *seqlist ,SeqListType value)
{
    assert(seqlist);
    int i = 0;
    for (;i<seqlist->size;i++)
    {
        if(seqlist->SeqListArr[i] == value)
        {
            printf("元素下标为:%d \n",i);
        }
    }
    printf("没有该元素!\n");
}

//任意位置插入元素
void SeqListPushPos(SeqList *seqlist ,size_t pos,SeqListType value )
{
    assert(seqlist);
    if(pos>=seqlist->size)
    {
        printf("输入有误!\n");
        return;
    }
    if(seqlist->size>=SeqListArrMax)
    {
        printf("顺序表已满\n");
        return;
    }
    int i = seqlist->size-1;
    for (;i>pos;i--)
    {
        seqlist->SeqListArr[i+1] = seqlist->SeqListArr[i];
    }
    seqlist->SeqListArr[pos] = value;
    seqlist->size++;
}


//test code

void TestSeqListInit()
{
   SeqList seqlist; 
    SeqListInit(&seqlist);
    SeqListPrint(&seqlist,"\n********Init************");
}

void TestSeqListPushEnd()
{
    SeqList seqlist;
    SeqListInit(&seqlist);
    SeqListPushEnd(&seqlist,'a');
    SeqListPushEnd(&seqlist,'b');
    SeqListPushEnd(&seqlist,'c');
    SeqListPrint(&seqlist,"\n********PushEnd************");
}

void TestSeqListPopEnd()
{
    SeqList seqlist;
    SeqListInit(&seqlist);
    SeqListPushEnd(&seqlist,'a');
    SeqListPushEnd(&seqlist,'b');
    SeqListPushEnd(&seqlist,'c');
    SeqListPopEnd(&seqlist);
    SeqListPrint(&seqlist,"\n********PopEnd************");
}

void TestSeqListPushStart()
{
    SeqList seqlist;
    SeqListInit(&seqlist);
    SeqListPushEnd(&seqlist,'c');
    SeqListPushEnd(&seqlist,'d');
    SeqListPushEnd(&seqlist,'e');
    SeqListPushStart(&seqlist,'a');
    SeqListPushStart(&seqlist,'b');
    SeqListPrint(&seqlist,"\n**********PushStart************");
}

void TestSeqListPopStart()
{
    SeqList seqlist;
    SeqListInit(&seqlist);
    SeqListPushEnd(&seqlist,'a');
    SeqListPushEnd(&seqlist,'b');
    SeqListPushEnd(&seqlist,'c');
    SeqListPushEnd(&seqlist,'d');
    SeqListPopStart(&seqlist);
    SeqListPrint(&seqlist,"\n**********PushStart************");
}

void TestSeqListRead()
{
    SeqList seqlist;
    SeqListInit(&seqlist);
    SeqListPushEnd(&seqlist,'a');
    SeqListPushEnd(&seqlist,'b');
    SeqListPushEnd(&seqlist,'c');
    SeqListRead(&seqlist,2);
    SeqListPrint(&seqlist,"\n**********Read************");
}

void TestSeqListSet()
{
    SeqList seqlist;
    SeqListInit(&seqlist);
    SeqListPushEnd(&seqlist,'a');
    SeqListPushEnd(&seqlist,'b');
    SeqListPushEnd(&seqlist,'c');
    SeqListPushEnd(&seqlist,'d');
    SeqListPushEnd(&seqlist,'e');
    SeqListSet(&seqlist,3,'g');
    SeqListPrint(&seqlist,"\n**********Set************");
}

void TestSeqListSetPos()
{
    SeqList seqlist;
    SeqListInit(&seqlist);
    SeqListPushEnd(&seqlist,'a');
    SeqListPushEnd(&seqlist,'b');
    SeqListPushEnd(&seqlist,'c');
    SeqListPushEnd(&seqlist,'d');
    SeqListPushEnd(&seqlist,'e');
    SeqListSetPos(&seqlist,'c');
    SeqListPrint(&seqlist,"\n**********SetPos************");
}

void TestSeqListPushPos()
{
     SeqList seqlist;
     SeqListInit(&seqlist);   
     SeqListPushEnd(&seqlist,'a');
     SeqListPushEnd(&seqlist,'b');
     SeqListPushEnd(&seqlist,'c');
     SeqListPushEnd(&seqlist,'d');
     SeqListPushEnd(&seqlist,'e');
     SeqListPushEnd(&seqlist,'f');
     SeqListPushPos(&seqlist,3,'w');
    SeqListPrint(&seqlist,"\n**********PustPos************");
}

int main()
{
    TestSeqListInit();
    TestSeqListPushEnd();
    TestSeqListPopEnd();
    TestSeqListPushStart();
    TestSeqListPopStart();
    TestSeqListRead();
    TestSeqListSet;
    TestSeqListSetPos();
    TestSeqListPushPos();
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值