数据结构:顺序表的增删改查

顺序表

逻辑结构体:线型

物理结构:顺序存储

malloc () ;

功能:在堆区开辟一片空间

返回值:成功返回首地址,失败返回NULL.

参数:开辟空间的大小

栈区:自动开辟自动释放局部变量

全局:   未初始化0

以初始化          声明周期,整个程序

堆区:手动开辟,手动释放

typedef  int *p

P== int *q;

p  q==int *q

——————————————————————————————————————————

typedef  struct sqlist  *p;

p==strucst  sqliste *

p  q==struct  sqlist *q;

头文件.h

#ifndef _SQLIST_H
#define _SQLIST_H
typedef char sqlist_data_t;//方便修改数组类型

#define N 1024  //方便修改数组大小

struct sqlist{
	sqlist_data_t buf[N];
	int len;
};  //方便书写
typedef struct sqlist sql_node;
typedef struct sqlist* sql_pnode;


//创建顺序表,不传参数,使用malloc
sql_pnode create_sqlist();


//增删改查

//插入
int insert_sqlist(sql_pnode L, sqlist_data_t data, int pos);

//判满
int full_sqlist(sql_pnode L);

//判空
int empty_sqlist(sql_pnode);

//打印
int show_sqlist(sql_pnode L);

//删除 按照位置删除
int delete_sqlist(sql_pnode L, int pos);

//查找 元素查位置
int search_sqlist(sql_pnode L, sqlist_data_t data);

//清空
int clean_sqlist(sql_pnode L);

//销毁
int destory_sqlist(sql_pnode *L);

#endif

源文件.c

#include <stdlib.h>//malloc函数需要的头文件
#include "sqlist.h"
#include <stdio.h>


//创建顺序表,不传参数,使用malloc
sql_pnode create_sqlist()
{
	//创建空间
	sql_pnode L = (sql_pnode)malloc(sizeof(sql_node));
	if(NULL == L)
	{
		printf("malloc is default\n");   //方便调试
		return NULL;
	}
	
	//初始化
	L->len = 0;
	
	return L;
}

//插入
int insert_sqlist(sql_pnode L, sqlist_data_t data, int pos)
{
	//判断顺序表首地址有没有问题
	if(NULL == L)
	{
		printf("L is NULL\n");
		return -1;
	}
	//判断插入位置是否有问题
	if(pos < 0 || pos > L->len)
	{
		printf("pos is default\n");
		return -1;
	}
	//判断顺序表是否为满
	if(0 == full_sqlist(L))
	{
		printf("sqliste is full\n");
		return -1;
	}
	//插入
	//移动
	int i;
	for(i = L->len-1; i >= pos; i--)
	{
		L->buf[i+1] = L->buf[i];
	}
	
	//赋值
	L->buf[pos] = data;
    L->len++;	
	return 0;
	
}
//判满
int full_sqlist(sql_pnode L)
{
	if(L->len == N)
		return 0;
	else
		return -1;
}

//判空
int empty_sqlist(sql_pnode L)
{
	if( 0 == L->len)
		return 0;
	else
		return -1;
}
//打印
int show_sqlist(sql_pnode L)
{
	//判断顺序表首地址有没有问题
	if(NULL == L)
	{
		printf("L is NULL\n");
		return -1;
	}
	//判空
	if(0 == empty_sqlist(L))
	{
		printf("L is empty\n");
		return -1;
	}
	
	int i;
	for(i = 0; i < L->len; i++)
	{
		printf("buf[%d]=%c ", i,L->buf[i]);
	}
	puts("");
	return 0;
}
//删除 按照位置删除
int delete_sqlist(sql_pnode L, int pos)
{
	//判断顺序表首地址有没有问题
	if(NULL == L)
	{
		printf("L is NULL\n");
		return -1;
	}
	//判断插入位置是否有问题
	if(pos < 0 || pos >= L->len)
	{
		printf("pos is default\n");
		return -1;
	}
	//判断顺序表是否为满
	if(0 == empty_sqlist(L))
	{
		printf("sqliste is empty\n");
		return -1;
	}

	int i;
	for(i = pos; i < L->len-1; i++)
	{
		L->buf[i] = L->buf[i+1];
	}

	L->len--;

	return 0;
}
//查找 元素查位置
int search_sqlist(sql_pnode L, sqlist_data_t data)
{
	//判断顺序表首地址有没有问题
	if(NULL == L)
	{
		printf("L is NULL\n");
		return -1;
	}
	//判断顺序表是否为空
	if(0 == empty_sqlist(L))
	{
		printf("sqliste is empty\n");
		return -1;
	}
	int i;
	for(i = 0; i < L->len ;i++)
	{
		if(data == L->buf[i])
			return i;
	}
	printf("no search the data\n");
	return -1;
}
//清空
int clean_sqlist(sql_pnode L)
{
	//判断顺序表首地址有没有问题
	if(NULL == L)
	{
		printf("L is NULL\n");
		return -1;
	}
	//判断顺序表是否为空
	if(0 == empty_sqlist(L))
	{
		printf("sqliste is empty\n");
		return -1;
	}

	L->len = 0;

	return 0;
}

//消耗
int destory_sqlist(sql_pnode *L)
{
	//判断顺序表首地址有没有问题
	if(NULL == *L)
	{
		printf("L is NULL\n");
		return -1;
	}
	free(*L);   //释放空间
	*L = NULL;
	return 0;
}

main函数.c文件(函数调用)

#include "sqlist.h"
#include <stdio.h>


int main()
{
	sql_pnode L = create_sqlist();
	
	insert_sqlist(L,'A',0);
	insert_sqlist(L,'B',0);
	insert_sqlist(L,'C',0);
	insert_sqlist(L,'D',0);
	
	show_sqlist(L);

	delete_sqlist(L,2);

	show_sqlist(L);
    int pos = search_sqlist(L,'A');
	printf("pos = %d\n", pos);


    clean_sqlist(L);
	show_sqlist(L);

	destory_sqlist(&L);
	show_sqlist(L);
}

Makefile

OBJS=sqlist.o main.o
CFLAGS=-O -g -o

sqlist:$(OBJS)
	$(CC) $^ $(CFLAGS) $@

sqlist.o:sqlist.c sqlist.h
	$(CC) -c $< $(CFLAGS) $@

main.o:main.c 
	$(CC) -c $^ $(CFLAGS) $@

.PHONY:clean

clean:
	$(RM) $(OBJS) sqlist

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

এ᭄星辰

混口饭吃。。。。。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值