C中的函数功能介绍以及顺序表的书写

12 篇文章 2 订阅
11 篇文章 1 订阅
 typedefine:函数执行的时候,进行符号的转换。
 define:只做简单的替换,预处理
  区别:
 预处理:展开文件,对预处理的命令替换。
如何定义一个函数指针:先定义指针,*p,括号起来。再在

指针:存放地址的。存放内部值要加*
sizeof:数组占的空间,8个 ,字符串占8个字节
strlen:字符占的空间,7,字符串占7个字节,不加\0,所以少一个字节。

顺序表的书写思路:首先,创建目录,进入目录,建立三个文件夹,一个.c文件,一个main.c文件,一个.h文件。
在这个.h文件中,需要写头文件。结尾加#endif。
一般在.h文件中:
需要定义一个结构体,
#ifndef SQLIST_H
#define SQLIST_H

typedef struct sqlist_s
{
int *data; 定义一个数据指针
int cur_len; 定义当前长度
int size; 定义表的大小
}sqlist_t;
#define SUCCESS 0 用来判断对错
#define FAILED -1 用来判断对错
再定义函数,
int sqlist_head_add(sqlist_t *sqlist,int data); 头插
int sqlist_tail_add(sqlist_t *sqlist,int data); 尾插
int sqlist_insert(sqlist_t *sqlist,int data,int pos);

int sqlist_del_data(sqlist_t *sqlist,int data); 删除数据
int sqlist_del_position(sqlist_t *sqlist,int pos); 删除位置

int sqlist_get_data_pos(sqlist_t *sqlist,int data); 获取制定位置的数据。
int sqlist_get_pos_data(sqlist_t *sqlist,int pos); 获取制定的数据位置

int sqlist_reserve(sqlist_t *sqlist); 逆序
int sqlist_merge(sqlist_t *new_sqlist,sqlist_t sqlist1,sqlist_t sqlist2); 合并

void sqlist_display(sqlist_t sqlist); 遍历

int sqlist_init(sqlist_t *sqlist); 分配
int sqlist_destroy(sqlist_t *sqlist); 损毁

其次在.c文件中:包含四个头文件,然后写每个函数功能。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include “sqlist.h”

void sqlist_display(sqlist_t sqlist)
{
int i;
printf(“display sqlist\n”);
for(i = 0;i < sqlist.cur_len;i++)
{
printf(“sqlist position: %d ,data : %d\n”,i+1,sqlist.data[i]);
}
printf("==============================\n");
}

int sqlist_increase(sqlist_t *sqlist)
{
int *ptr=realloc(sqlist->data,(sqlist->size + INCREASE_SIZE) *sizeof(int));
if(ptr == NULL)
{
printf("%s:%d :ptr is NULL\n",FUNCTION,LINE);
return FAILED;
}
memset(ptr+(sqlist->size * sizeof(int)),0,INCREASE_SIZE * sizeof(int));

sqlist->data = ptr;
sqlist->size += INCREASE_SIZE;

return SUCCESS;

}

int sqlist_init(sqlist_t *sqlist)
{
if(sqlist == NULL)
{
printf("%s:%d :sqliist is NULL\n",FUNCTION,LINE);
return FAILED;
}

sqlist->cur_len = 0;
sqlist->size = INIT_SIZE;
sqlist->data = (int *)malloc(INIT_SIZE * sizeof(int));
if(sqlist->data == NULL)
{
    printf("%s:%d :malloc  failed \n",__FUNCTION__,__LINE__);
    return FAILED;
}
memset(sqlist->data,0,sizeof(int) * INIT_SIZE);

return SUCCESS;

}

int sqlist_destroy(sqlist_t *sqlist)
{
if(sqlist == NULL)
{
printf("%s:%d :sqliist is NULL\n",FUNCTION,LINE);
return FAILED;
}

if(sqlist->data == NULL)
{
    printf("%s:%d :sqlist->data is NULL\n",__FUNCTION__,__LINE__);
	return FAILED;
}

free(sqlist->data);
sqlist->data = NULL;

return SUCCESS;

}

int sqlist_tail_add(sqlist_t *sqlist,int data)
{
int ret;
if(sqlist == NULL)
{
printf("%s:%d :sqliist is NULL\n",FUNCTION,LINE);
return FAILED;
}

if(sqlist->cur_len >= sqlist->size)
{
    ret = sqlist_increase(sqlist);
	if(ret == FAILED)
	{
		printf("%s:%d :sqlist_increase failed\n",__FUNCTION__,__LINE__);
		return FAILED;
	}
}

sqlist->data[sqlist->cur_len] = data;
sqlist->cur_len++;

return SUCCESS;

}

int sqlist_head_add(sqlist_t *sqlist,int data)
{
int ret;
int i;
if(sqlist == NULL)
{
printf("%s:%d :sqliist is NULL\n",FUNCTION,LINE);
return FAILED;
}

if(sqlist->cur_len >= sqlist->size)
{
    ret = sqlist_increase(sqlist);
	if(ret == FAILED)
	{
		printf("%s:%d :sqlist_increase failed\n",__FUNCTION__,__LINE__);
		return FAILED;
	}
}

for(i = sqlist->cur_len;i>0;i--)
{
    sqlist->data[i] = sqlist->data[i - 1];
}

sqlist->data[0] = data;
sqlist->cur_len++;

return SUCCESS;

}

int sqlist_insert(sqlist_t *sqlist,int data,int pos)
{
int i;
int ret;

if(sqlist == NULL)
{
	printf("%s:%d :sqliist is NULL\n",__FUNCTION__,__LINE__);
	return FAILED;
}

if(pos < 1 || pos > sqlist->cur_len)
{
    printf("pos is invaild value\n");
	return FAILED;
}

if(sqlist->cur_len >= sqlist->size)
{
    ret = sqlist_increase(sqlist);
	if(ret == FAILED)
	{
		printf("%s:%d :sqlist_increase failed\n",__FUNCTION__,__LINE__);
		return FAILED;
	}
}

for(i = sqlist->cur_len;i>=pos;i--)
{
    sqlist->data[i] = sqlist->data[i - 1];
}

sqlist->data[pos - 1] = data;
sqlist->cur_len++;
return SUCCESS;

}

int sqlist_del_position(sqlist_t *sqlist,int pos)
{
int i;

if(sqlist == NULL)
{
	printf("%s:%d :sqliist is NULL\n",__FUNCTION__,__LINE__);
	return FAILED;
}

if(pos < 1 || pos > sqlist->cur_len)
{
    printf("pos is invaild value\n");
	return FAILED;
}

for(i = pos;i < sqlist->cur_len;i++)
{
    sqlist->data[i - 1] = sqlist->data[i];
}

sqlist->cur_len--;

return SUCCESS;

}

int sqlist_del_data(sqlist_t *sqlist,int data)
{
int i;
int ret;

if(sqlist == NULL)
{
	printf("%s:%d :sqliist is NULL\n",__FUNCTION__,__LINE__);
	return FAILED;
}

for(i = 0;i < sqlist->cur_len;i++)
{
    if(sqlist->data[i] == data)
	{
	    ret = sqlist_del_position(sqlist,i+1);
		if(ret == FAILED)
		{
			printf("%s:%d :sqlist_del_position failed\n",__FUNCTION__,__LINE__);
			return FAILED;
		}
		return SUCCESS;
	}
}

return FAILED;

}

int sqlist_get_data_pos(sqlist_t *sqlist,int data)
{
int i;
if(sqlist == NULL)
{
printf("%s:%d :sqliist is NULL\n",FUNCTION,LINE);
return FAILED;
}

for(i = 0;i < sqlist->cur_len;i++)
{
    if(sqlist->data[i] == data)
		return i+1;
}

return FAILED;

}

int sqlist_get_pos_data(sqlist_t *sqlist,int pos)
{
if(sqlist == NULL)
{
printf("%s:%d :sqliist is NULL\n",FUNCTION,LINE);
return FAILED;
}

if(pos < 1 || pos > sqlist->cur_len)
{
    printf("pos is invaild value\n");
	return FAILED;
}	

return sqlist->data[pos-1];

}

int sqlist_reserve(sqlist_t *sqlist)
{
int tmp_data;
int i;

if(sqlist == NULL)
{
	printf("%s:%d :sqliist is NULL\n",__FUNCTION__,__LINE__);
	return FAILED;
}

for(i = sqlist->cur_len;i > sqlist->cur_len / 2;i--)
{
    tmp_data = sqlist->data[i -1];
	sqlist->data[i -1] = sqlist->data[sqlist->cur_len - i];
	sqlist->data[sqlist->cur_len - i] = tmp_data;
}

return SUCCESS;

}

int sqlist_merge(sqlist_t *new_sqlist,sqlist_t sqlist1,sqlist_t sqlist2)
{
int i;
if(new_sqlist == NULL)
{
printf("%s:%d :sqliist is NULL\n",FUNCTION,LINE);
return FAILED;
}

new_sqlist->cur_len = 0;
new_sqlist->size = sqlist1.cur_len + sqlist2.cur_len;

new_sqlist->data = (int *)malloc(sizeof(int) * new_sqlist->size);
if(new_sqlist->data == NULL)
{
	printf("%s:%d :new_sqlist->data is NULL\n",__FUNCTION__,__LINE__);
	return FAILED;	
}
memset(new_sqlist->data,0,sizeof(int) * new_sqlist->size);

for(i = 0;i < sqlist1.cur_len;i++)
{
    new_sqlist->data[i] = sqlist1.data[i];
	new_sqlist->cur_len++;
}

for(i = 0;i < sqlist2.cur_len;i++)
{
    new_sqlist->data[sqlist1.cur_len + i] = sqlist2.data[i];
	new_sqlist->cur_len++;
}

return SUCCESS;

}
在这个main.C文件中: 包含两个头文件,一个主函数,注意,写主函数需要定义一个返回变量,再定义参数。
#include <stdio.h>
#include “sqlist.h”

int main()
{
int ret;
int i;
sqlist_t sqlist1;
sqlist_t sqlist2;
sqlist_t sqlist_new;

ret = sqlist_init(&sqlist1);
if(ret == FAILED)
{
    printf("sqlist_init:%d failed \n",__LINE__);
	return FAILED;
}

for(i = 0; i < 5;i++)
{
    ret = sqlist_tail_add(&sqlist1,i);
	if(ret == FAILED)
	{
	    printf("sqlist_tail_add:%d failed \n",__LINE__);
		return FAILED;
	}
}

printf("============sqlist1============\n");
sqlist_display(sqlist1);

ret = sqlist_init(&sqlist2);
if(ret == FAILED)
{
    printf("sqlist_init:%d failed \n",__LINE__);
	return FAILED;
}

for(i = 5; i < 10;i++)
{
    ret = sqlist_head_add(&sqlist2,i);
	if(ret == FAILED)
	{
	    printf("sqlist_head_add:%d failed \n",__LINE__);
		return FAILED;
	}
}

printf("============sqlist2============\n");
sqlist_display(sqlist2);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值