数据结构 day1

本文介绍了使用C语言实现的顺序列表数据结构,包括序列列表的创建、空/满判断、头部插入、尾部插入、删除头部元素、在指定位置插入以及释放内存的方法。
摘要由CSDN通过智能技术生成

思维导图

顺序表的基本操作

头文件

#ifndef __SEQ_LIST_H__
#define __SEQ_LIST_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 7
typedef int datatype;
typedef struct seq_list
{
	datatype data[MAX];
	int len;
}seq_list,*seq_p;
seq_p seq_creat();
int empty_seq(seq_p S);
int full_seq(seq_p S);
void insert_head(seq_p S,datatype data);
void show_seq(seq_p S);
void insert_tail(seq_p S,datatype data);
void delete_head(seq_p S);
void zero(seq_p S);
void insert_location(seq_p S,datatype data,int n);
void free_seq(seq_p S);
#endif

主函数:

#include "seq_list.h"
int main(int argc, const char *argv[])
{
	seq_p S=seq_creat();
	empty_seq(S);
	full_seq(S);
	insert_head(S,50);
	insert_head(S,12);
	insert_head(S,45);
	insert_head(S,78);
	insert_head(S,66);
	show_seq(S);
	putchar(10);
	insert_tail(S,100);
	show_seq(S);
	putchar(10);
	delete_head(S);
	show_seq(S);
	putchar(10);
	insert_location(S,666,2);
	show_seq(S);
	putchar(10);
	zero(S);
	show_seq(S);
	putchar(10);
	free_seq(S);
	show_seq(S);
	return 0;
}

自定义函数

#include "seq_list.h"
seq_p seq_creat()
{
	seq_p S=(seq_p)malloc(sizeof(seq_list));
	if(S==NULL)
	{
		printf("apply fail\n");
		return NULL;
	}
	S->len=0;
	bzero(S->data,sizeof(S->data));
	return S;
}
int empty_seq(seq_p S)
{
	if(S==NULL)
	{
		printf("parameter is void\n");
		return -1;
	}
	return S->len==0?1:0;
}
int full_seq(seq_p S)
{
	if(S==NULL)
	{
		printf("parameter is void\n");
		return -1;
	}
	return S->len==MAX?1:0;
}
void insert_head(seq_p S,datatype data)
{
	if(S==NULL)
	{
		printf("parameter is void\n");
		return;
	}
	if(full_seq(S))
	{
		printf("the sequence is full\n");
		return;
	}
	for(int i=S->len-1;i>=0;i--)
	{
		S->data[i+1]=S->data[i];
	}
	S->data[0]=data;
	S->len++;
}
void show_seq(seq_p S)
{
	if(S==NULL)
	{
		printf("parameter is void\n");
		return;
	}
	if(empty_seq(S))
	{
		printf("the sequence is void\n");
		return;
	}
	for(int i=0;i<S->len;i++)
		printf("data[%d]=%d\n",i,S->data[i]);
}
void insert_tail(seq_p S,datatype data)
{
	if(S==NULL)
	{
		printf("parameter is void\n");
		return;
	}
	if(full_seq(S))
	{
		printf("the sequence is full\n");
		return;
	}
	S->data[S->len]=data;
	S->len++;
}
void delete_head(seq_p S)
{
	if(S==NULL)
	{
		printf("parameter is void\n");
		return;
	}
	if(empty_seq(S))
	{
		printf("the sequence is void\n");
		return;
	}
	for(int i=0;i<S->len-1;i++)
	{
		S->data[i]=S->data[i+1];
	}
	S->len--;
}
void zero(seq_p S)
{
	for(int i=0;i<S->len;i++)
		S->data[i]=0;
}
void insert_location(seq_p S,datatype data,int n)
{
	if(full_seq(S))
	{
		printf("the sequence is full\n");
		return;
	}
	for(int i=S->len-1;i>=n;i--)
	{
		S->data[i+1]=S->data[i];
	}
	S->data[n]=data;
	S->len++;
}
void free_seq(seq_p S)
{
	free(S);
	S=NULL;
}

实现结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值