Linux C学习第十七天

本文详细介绍了线性表的基本操作,包括使用头插法、尾插法和指定位置插入数据,以及如何在指定位置删除数据。通过具体实现,读者可以深入了解线性表的工作原理和数据结构的设计。

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

线性表:
实现创建线性表,头插法,尾插法插入数据,指定位置插入数据,指定位置删除数据功能
头文件Seq.h:

#ifndef _SEQ_H_
#define _SEQ_H_
#define SIZE 10
#define ADD_SIZE 5
typedef int DATA;
typedef enum{TRUE,FALSE,ERROR}BOOL;
typedef struct deque
{
	DATA *pData;
	DATA maxlen;
	DATA len;
}Seq;
// 创建顺序表
Seq *CreatDeq();

//释放空间
void Distory(Seq *s);

//打印线性表
void Display(Seq *s);

//重新分配空间
BOOL *AgainMalloc(Seq *s);

// 插入数据:尾插
// s:要插入的顺序表
// n:要插入的数据
// 返回值:成功返回 TRUE,失败返回FALSE,其他返回ERROR
BOOL Insert(Seq *s,DATA n);

// 插入数据:头插
// s:要插入的顺序表
// data:要插入的数据
// 返回值:成功返回 TRUE,失败返回FALSE,其他返回ERROR
BOOL Head_Insert(Seq *s,DATA n);

// 插入数据:根据位置插入数据
// s    :要插入的顺序表
// index: 要插入位置的下标
// n:要插入的数据
// 返回值:成功返回 TRUE,失败返回FALSE,其他返回ERROR
BOOL Insert_Pos(Seq *s,DATA index,DATA n);

// 插入数据:根据位置删除数据
// s    :要删除的顺序表
// index: 要删除位置的下标
// 返回值:成功返回 TRUE,失败返回FALSE,其他返回ERROR
BOOL Delete_Pos(Seq *s,DATA index);


#endif //_SEQ_H_

功能实现函数Seq.c:

#include "Seq.h"
#include <stdlib.h>
#include <stdio.h>
Seq *Creat()
{
	Seq *pa = (Seq*)malloc(sizeof(Seq)/sizeof(char));
	if(NULL == pa)
	{
		return NULL;
	}
	pa->pData = (DATA*)malloc(sizeof(DATA)/sizeof(char)*10);
	if(NULL == pa->pData)
	{
		free(pa);
		return NULL;
	}
	pa->len = 0;
	pa->maxlen = SIZE;
	return pa;
}
BOOL Insert(Seq *s,DATA n)
{
	if(NULL == s)
	{
		return ERROR;
	}
	if(s->len == s->maxlen)
	{
		if(AgainMalloc(s)!=TRUE)
			return FALSE;
	}
		s->pData[s->len++]=n;
	
	return TRUE;
}
BOOL Head_Insert(Seq *s,DATA n)
{
	if(NULL == s)
	{
		return ERROR;
	}
	if(s->len == s->maxlen)
	{
		if(AgainMalloc(s)!=TRUE)
			return FALSE;
	}
	int i;
	for(i = s->len-1;i>=0;i--)
	{
		s->pData[i+1] = s->pData[i];
	}
	s->pData[0] = n;
	s->len++;
	return TRUE;
}
BOOL Insert_Pos(Seq *s,DATA index,DATA n)
{
	if(NULL == s||index <=0||index>s->len)
	{
		return ERROR;
	}
	if(s->len == s->maxlen)
	{
		if(AgainMalloc(s)!=TRUE)
			return FALSE;
	}
	int i;
	for(i = s->len-1;i>=index;i--)
	{
		s->pData[i+1] = s->pData[i];
	}
	s->pData[index] = n;
	s->len++;
	return TRUE;
}
BOOL Delete_Pos(Seq *s,DATA index)
{
	if(NULL == s||index <=0||index>=s->len)
	{
		return ERROR;
	}
	if(s->len == s->maxlen)
	{
		if(AgainMalloc(s)!=TRUE)
			return FALSE;
	}
	int i;
	for(i = index;i<s->len-1;i++)
	{
		s->pData[i] = s->pData[i+1];
	}
	
	s->len--;
	return TRUE;
}
BOOL *AgainMalloc(Seq *s)
{
	if(NULL == s)
	{
		return ;
	}
	DATA newsize = (sizeof(DATA)/sizeof(char))*(s->maxlen+ADD_SIZE);
	DATA *p = (DATA*)realloc(s->pData,newsize);
	s->pData = p;
	s->maxlen = newsize;
	return TRUE;
}
void Distory(Seq *s)
{
	if(NULL == s)
	{
		return ;
	}
	free(s->pData);
	free(s);
}
void Display(Seq *s)
{
	int i;
	for(i = 0;i<s->len;i++)
	{
		printf("%-4d",s->pData[i]);
	}
	printf("\n");
}




主函数main

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

int main()
{
	Seq *s = Creat();
	if (NULL == s)
	{
		printf ("创建顺序表失败\n");
	}
	
	printf ("创建顺序表成功\n");
	
	
	int i;
	for (i = 0; i < 18; i++)
	{
		Insert(s,i);
	}
	Display(s);
	Insert_Pos(s,4,123);
	Display(s);
	Delete_Pos(s,2);
	Display(s);	
	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值