当前位置:   article > 正文

C语言 | 数据结构之顺序表_c语言中seq()

c语言中seq()

C语言 | 数据结构之顺序表


时间:2023年12月20日20:25:29

1.参考

1.C语言 | 数据结构之顺序表_seq-plist-CSDN博客

2.structure/2_seqlist · cProgram/100Example - 码云 - 开源中国 (gitee.com)

3.顺序表(顺序存储结构)及初始化详解 (biancheng.net)

4.顺序表的基本操作(C语言详解版) (biancheng.net)

2.顺序表的说明和操作

顺序表,全名顺序存储结构,是线性表的一种。线性表用于存储逻辑关系为“一对一”的数据,因此顺序表也是。

顺序表对数据的物理存储结构也有要求。顺序表存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储起来,存储时做到数据元素之间不留一丝缝隙。

#define SIZE    (8)
typedef int datatype;
typedef struct seqlist{
    datatype data[SIZE];
    int last;
}seq_list, *seq_plist;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如下图,就是上述顺序表的数据存储的示意图:

seqlist

顺序表的另一种定义方式:
typedef struct Table{
    int * head;//声明了一个名为head的长度不确定的数组,也叫“动态数组”
    int length;//记录当前顺序表的长度
    int size;//记录顺序表分配的存储容量
}table, * p_table;
  • 1
  • 2
  • 3
  • 4
  • 5

顺序表初始化
void seqlist_init(seq_plist *L)
{
    *L = (seq_plist)malloc(sizeof(seq_list));
    if(L == NULL){
        perror("malloc err");return;
    }

    (*L)->last = -1;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
顺序表另外一种初始化方式:
seq_plist seqlist_init0(void)
{
    seq_plist l = NULL;
    l = (seq_plist)malloc(sizeof(seq_list));
    if(l == NULL){
        perror("malloc err");return NULL;
    }

    l->last = -1;
    return l;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
检查顺序表是否为空

seqlist_empty

bool seqlist_isempty(seq_plist l)
{
    if(l->last == -1){
        return true;
    }else{
        return false;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
检查顺序表是否已满

seqlist_full

bool seqlist_isfull(seq_plist l)
{
    if(l->last == (SIZE - 1)){
        return true;
    }else{
        return false;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
遍历顺序表
void seqlist_show(seq_plist l)
{
    int i;
    for(i = 0; i<= l->last; i++){
        printf("%d\t", l->data[i]);
    }
    printf("\n");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
在顺序表中插入元素

seqlist_insert

bool seqlist_insert(seq_plist l, datatype data)
{
    int i,j;
    if(seqlist_isfull(l)){
        printf("seqlist is full !\n");return false;
    }

    for(i = 0; i<= l->last; i++){
        if(data < l->data[i]){
            break;
        }
    }

    for(j = l->last; j >= i; j--){
        l->data[j+1] = l->data[j];
    }

    l->data[i] = data;

    l->last++;
    return true;

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
在顺序表中删除元素

seqlist_del

bool seqlist_del(seq_plist l, datatype data)
{
    int i,j;
    if(seqlist_isempty(l)){
        printf("seqlist is empty!\n");return false;
    }

    for(i = 0; i<= l->last; i++){
        if(data == l->data[i]){
            break;
        }
    }

    if(i > l->last){
        printf("data %d is not exit.\n", data);return false;
    }

    for(j = i; j< l->last; j++){
        l->data[j] = l->data[j+1];
    }

    l->last --;
    return true;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

3.代码工程实例

[ master ] #20231220-04# 数据结构之顺序表 · 26b0dd0 · cProgram/100Example - Gitee.com

工程文件
[fly@fly-vm seqlist]$ tree
.
├── main.c
├── Makefile
├── seqlist.c
└── seqlist.h

0 directories, 4 files
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
工程编译Makefile
CC             	 = gcc
CFLAGS  		= -Wall -g -O0
OBJS    		= seqlist
SRC              = main.c seqlist.c

all:$(OBJS)

$(OBJS):$(SRC)
        $(CC) $(CFLAGS) -o $@ $^

clean:
        $(RM) $(OBJS) .*.sw?

.PHONY: all clean
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
测试Demo
/*
   1、用顺序表存储一些正整数,输入正整数
   表示插入数据(比如输入3表示插入3),
   输入负整数表示删除数据(比如输入-2
   表示删除2),输入字符表示退出程序。
   插入和删除的过程中保持该表递增有序。
 */
void tester_seqlist(void){
    seq_plist l;
    datatype data;
    int ret;

    printf("sizeof(seq_list) = %ld\n", \
        sizeof(seq_list));

    seqlist_init(&l);
    while(1){
        printf("Please input data: ");
        ret = scanf("%d", &data);
        if(ret != 1){
            exit(0);
        }else if(data > 0){
            seqlist_insert(l, data);
            seqlist_show(l);
        }else{
            seqlist_del(l, -data);
            seqlist_show(l);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
编译、运行
[fly@fly-vm seqlist]$ make
gcc -Wall -g -O0 -o seqlist main.c seqlist.c
[fly@fly-vm seqlist]$ ./seqlist
sizeof(seq_list) = 36
Please input data: 1001
1001
Please input data: 1002
1001    1002
Please input data: 1003
1001    1002    1003
Please input data: 1004
1001    1002    1003    1004
Please input data: 1005
1001    1002    1003    1004    1005
Please input data: 1006
1001    1002    1003    1004    1005    1006
Please input data: 1007
1001    1002    1003    1004    1005    1006    1007
Please input data: 1008
1001    1002    1003    1004    1005    1006    1007    1008
Please input data: 1009
seqlist is full !
1001    1002    1003    1004    1005    1006    1007    1008
Please input data: -1003
1001    1002    1004    1005    1006    1007    1008
Please input data: -1008
1001    1002    1004    1005    1006    1007
Please input data: -1001
1002    1004    1005    1006    1007
Please input data: -1002
1004    1005    1006    1007
Please input data: -1005
1004    1006    1007
Please input data: -1006
1004    1007
Please input data: -1004
1007
Please input data: -1007

Please input data: -1000
seqlist is empty!

Please input data: q

6    1007
Please input data: -1002
1004    1005    1006    1007
Please input data: -1005
1004    1006    1007
Please input data: -1006
1004    1007
Please input data: -1004
1007
Please input data: -1007

Please input data: -1000
seqlist is empty!

Please input data: q
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

请添加图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/1004115
推荐阅读
相关标签
  

闽ICP备14008679号