赞
踩
时间:2023年12月20日20:25:29
1.C语言 | 数据结构之顺序表_seq-plist-CSDN博客
2.structure/2_seqlist · cProgram/100Example - 码云 - 开源中国 (gitee.com)
顺序表,全名顺序存储结构,是线性表的一种。线性表用于存储逻辑关系为“一对一”的数据,因此顺序表也是。
顺序表对数据的物理存储结构也有要求。顺序表存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储起来,存储时做到数据元素之间不留一丝缝隙。
#define SIZE (8)
typedef int datatype;
typedef struct seqlist{
datatype data[SIZE];
int last;
}seq_list, *seq_plist;
如下图,就是上述顺序表的数据存储的示意图:
typedef struct Table{
int * head;//声明了一个名为head的长度不确定的数组,也叫“动态数组”
int length;//记录当前顺序表的长度
int size;//记录顺序表分配的存储容量
}table, * p_table;
void seqlist_init(seq_plist *L)
{
*L = (seq_plist)malloc(sizeof(seq_list));
if(L == NULL){
perror("malloc err");return;
}
(*L)->last = -1;
}
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;
}
bool seqlist_isempty(seq_plist l)
{
if(l->last == -1){
return true;
}else{
return false;
}
}
bool seqlist_isfull(seq_plist l)
{
if(l->last == (SIZE - 1)){
return true;
}else{
return false;
}
}
void seqlist_show(seq_plist l)
{
int i;
for(i = 0; i<= l->last; i++){
printf("%d\t", l->data[i]);
}
printf("\n");
}
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;
}
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;
}
[ master ] #20231220-04# 数据结构之顺序表 · 26b0dd0 · cProgram/100Example - Gitee.com
[fly@fly-vm seqlist]$ tree
.
├── main.c
├── Makefile
├── seqlist.c
└── seqlist.h
0 directories, 4 files
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、用顺序表存储一些正整数,输入正整数
表示插入数据(比如输入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);
}
}
}
[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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。