顺序表功能的模拟实现

本文详细介绍了顺序表的基本概念及其实现方法,并提供了完整的代码示例,包括初始化、增删改查等基本操作。

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

今天学习了顺序表,对里面的知识有所了解,想通过自己的努力实现一下自己的顺序表

首先我们要写一个头文件,包含我们所有要实现的功能

#pragma once
#define HEADER printf("\n------------%s-----------\n",__FUNCTION__)
#include<stdio.h>
#include<stdlib.h>
#define seqlistmaxsize 1000
typedef char seqtype;
typedef struct seqlist{
    seqtype c[seqlistmaxsize];
    size_t size;
}seqlist;
void printseqlist(seqlist *seq);//打印顺序表
void seqlistInit(seqlist *seq);//初始化顺序表
void seqlistpushback(seqlist *seq,char value);//尾插元素
void seqlistpopback(seqlist *seq);//尾删元素
void seqlistpushhead(seqlist *seq,char value);//头插
void seqlistpophead(seqlist *seq);//头删
void seqlistinsert_pos(seqlist *seq,size_t pos,char value);//随机插
void seqlistpush_pos(seqlist *seq,size_t pos);//随机删
void seqlistfind(seqlist *seq,char value);//查找一个元素
void seqlistread(seqlist *seq,size_t pos);//读取一个元素
void seqlistinstead(seqlist *seq,size_t pos,char value);//替换一个元素

就下来我们就要一点点实现每一个函数

首先我们需要实现的就是  打印顺序表的函数,以及初始化顺序表的函数

#include "seqlist.h"
void printseqlist(seqlist *seq){
    size_t i = 0;
    if(seq->size==0){
        printf("kong,over");
        return;
    }
    for(i=0;i<seq->size;i++){
        printf("[%c]",seq->c[i]);
    }
    printf("\n");
}
void seqlistInit(seqlist *seq){
    if(NULL==seq){
        return;
    }
    seq->size=0;
}

接下来是尾插,尾删

void seqlistpushback(seqlist *seq,char value){
    if(seq->size >= 1000){
        return;//manle
    }
    seq->c[seq->size]=value;
    ++(seq->size);
}
void seqlistpopback(seqlist *seq){
    if(NULL==seq){
        return;
    }
    if(seq->size==0){
        return;//neirongkong,wufashan
    }
    seq->size--;
    printf("weishanhoudeshunxubiao\n");
}

以及他们的测试代码

void testpushback(){
    HEADER;
    seqlist seq;
    seqlistInit(&seq);

    seqlistpushback(&seq,'a');
    seqlistpushback(&seq,'b');
    seqlistpushback(&seq,'c');
    printf("weichahoudeshunxubiao\n");
    printseqlist(&seq);
}
void testpopback(){
    HEADER;
    seqlist seq;
    seqlistInit(&seq);
    seqlistpushback(&seq,'a');
    seqlistpushback(&seq,'b');
    seqlistpushback(&seq,'c');
    printseqlist(&seq);
    seqlistpopback(&seq);
    printseqlist(&seq);
}

下面我们从头部开始插入或者删除:

void seqlistpushhead(seqlist *seq,char value){
    if(NULL==seq){
        return;
    }
    if(seq->size==1000){
        return;//manle,bunengcha
    }
    else{
        int i=seq->size-1;
        for(;i>=0;i--){
        seq->c[i+1]=seq->c[i];
        }
        seq->c[0]=value;
        seq->size++;
        printf("touchahoudeshunxubiao\n");
    }
}
void seqlistpophead(seqlist *seq){
    if(NULL==seq){
        return;
    }
    else if(seq->size==0){
        return;//kong,shanbuliao
    }
    else{
        size_t i=1;
        for(;i<seq->size;i++){
            seq->c[i-1]=seq->c[i];
       }
        seq->size--;
        printf("toushanhoudeshunxubiao\n");
    }
}

还有他们的测试函数:

void testpushhead(){
    HEADER;
    seqlist seq;
    seqlistInit(&seq);

    seqlistpushback(&seq,'a');
    seqlistpushback(&seq,'b');
    seqlistpushback(&seq,'c');
    printseqlist(&seq);
    seqlistpushhead(&seq,'x');
    printseqlist(&seq);
}
void testpophead(){
    HEADER;
    seqlist seq;
    seqlistInit(&seq);
    seqlistpushback(&seq,'a');
    seqlistpushback(&seq,'b');
    seqlistpushback(&seq,'c');
    printseqlist(&seq);
    seqlistpophead(&seq);
    printseqlist(&seq);
}

在我们实现了头插头删,尾插尾删之后。是不是觉得还少点什么,对了,我们要是想删除特定元素,或者删除特定位置的元素应该怎么办呢:

void seqlistpush_pos(seqlist *seq,size_t pos){
    if(NULL==seq){
        return;//bugenniwanle
    }
    else if(seq->size==0){
        return;//kong,shanbuliao
    }
    else{
        int m=seq->size;
        for(;m>pos;m--){
            seq->c[m]=seq->c[m+1];
        }
        seq->size--;
        printf("shanchu---c[%d]---weizhideyuansu\n",pos);    }
}

另外,要是咱们想要读取某个下标的元素,或者找到某个元素的下标,我们又该怎么办呢:

void seqlistread(seqlist *seq,size_t pos){
    if(NULL==seq){
        return;
    }
    else if(seq->size==0){
        printf("kong,dubuliao\n");
        return;
    }
    else
         printf("duqu---c[%d]---deyuansu\n",pos);
        printf("[%c]\n",seq->c[pos]);
}
void seqlistfind(seqlist *seq,char value){
    if(NULL==seq){
        return;
    }
    else if(seq->size==0){
        printf("kong,zhaobuliao");
        return;
    }
    else{
        int i=0;
        for(;i<seq->size;i++){
            if(seq->c[i]==value){
                printf("chazhao---[%c]---dejiaobiao\n",value);
                printf("%d\n",i);
            }
        }
    }
}

最后,如果我们想要将某一个位置的元素替换掉,应该怎么做呢:

void seqlistinstead(seqlist *seq,size_t pos,char value){
    if(NULL==seq){
        return;
    }
    else if(seq->size==0){
        printf("kong,zhaobuliao");
        return;
    }
    else{
        seq->c[pos]=value;
        printf("xiugaihoudeshunxubiao:\n");
    }
}

到这里我们已经基本上实现了顺序表的操作,还有不足,以后加油

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值