数据结构第一天——————顺序表

25 篇文章 0 订阅
5 篇文章 0 订阅

数据结构的课程安排
1. 顺序表
2. 链表
3. 栈、队列
4. 树、图
5. 算法
6. 项目
数据结构培养的内容
1. 习惯: 画图–>伪代码–>代码–>运行测试
2. 思维: 逻辑思维 编程思想
3. 能力: 封装接口 调用接口
线性结构
如果当前结点有前驱,那么,它的前驱有且仅有一个。
如果当前结点有后继,那么,它的后继有且仅有一个。
例:数组中有五个元素,现在找到了下标为2的那个元素
前驱: 下标为2-1
后继: 下标为2+1
包含:顺序结构和链式结构
顺序表
特点 *****
地址连续 大小固定
除最前面的元素,其它元素都有前驱。
除最后面的元素,其它元素都有后继。
插入和删除的时候,需要移动元素,不方便。
访问方便。

定义一个数据类型来描述顺序表
	struct student
	{
		char name[SIZE];
		int age;
		int score[20];
	};
	typedef struct student data_t;
	struct list
	{
		data_t data[SIZE];
		int count; //计数器
	};	
	或者
	struct list 
	{
		data_t * pData;
		int len; //连续空间的大小
		int count; //计数器
	};
顺序表的操作
	创建顺序表
	插入数据到顺序表
	显示 
	修改 
	删除 
	查询 
	判断表空
	判断表满
	销毁顺序表
	
	int main()
	{
		//创建顺序表
		???? = createList(???);
		//存放学生信息到顺序表中 增加
		//显示
		//删除
		//修改
		//查询
		//销毁顺序表
		return 0;
	}

补充
内存分段:
栈段: 局部变量、参数
堆段: 动态申请malloc/calloc/realloc和释放free的内存
数据段: 全局变量、静态变量、常量
代码段: 程序

void test( int * p )
{
	* p = 90;
}
int add(int a, int b)
{
	return a + b;
}
int main()
{
	int num = 0;
	test(&num); //传出参数
	printf("num=%d\r\n", num);
	return 0;
}
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "list.h"



/*

函数名:createList

函数功能:创建线性表

函数参数:无

函数返回值:成功时,返回线性表首地址;失败时,返回NULL。

*/

LIST * createList( )

{

	LIST * pList = NULL;

	

	pList = ( LIST * )malloc( sizeof(LIST) );

	if ( NULL != pList )

	{

		memset( pList, 0, sizeof(LIST) );

	}

	

	return pList;

}



/*

函数名:destroyList

函数功能:销毁线性表

函数参数:LIST * pList : 线性表首地址

函数返回值:无

*/		

void destroyList( LIST * pList )

{

	if ( NULL == pList )

	{

		return ;

	}

	

	free(pList);

	pList = NULL;

}



/*

函数名:insertDataToList

函数功能:插入数据到线性表

函数参数:

	LIST * pList : 线性表首地址

	data_t newData : 要插入的数据

	int    offset : 要插入的位置

函数返回值:成功时,返回0;失败时,返回-1。

*/

int insertDataToList( LIST * pList, data_t newData, int offset )

{

	if ( TAIL == offset )//尾插

	{

		//插入数据 

		pList->data[pList->count] = newData;

		//更新计数器

		pList->count++;

	}

	else if ( HEAD == offset ) //头插

	{

		

	}

	else //中间插入

	{

		

	}

	return OK;

}

		

/*

函数名:showList

函数功能:显示

函数参数:LIST * pList : 线性表首地址

函数返回值:无

*/

void showList( LIST * pList )

{

	int i = 0;

	if ( NULL == pList )

	{

		return ;

	}

	for ( i = 0; i < pList->count; i++ )

	{

		printf( " %d ", pList->data[i] );

	}

	printf("\r\n");	

}



/*

函数名: updateList

函数功能:修改

函数参数:

	LIST * pList : 线性表首地址

	data_t oldData : 旧的数据

	data_t newData : 新的数据

函数返回值:成功时,返回0;失败时,返回-1。

*/

int updateList( LIST * pList, data_t oldData, data_t newData )

{

	int i;

	i=searchList(pList,oldData);

	if(i!=-1)

	{

		pList->data[i]=newData;

		return 0;

	}

return -1;

}

/*

函数名: deleteFromList

函数功能:删除

函数参数:

	LIST * pList : 线性表首地址

	int    offset : 要删除的位置

	data_t * pData : 保存被删除元素

函数返回值:成功时,返回0;失败时,返回-1。

*/		 

int deleteFromList( LIST * pList, int offset, data_t * pData )

{

	if ( TAIL == offset )//尾删

	{

		//保存数据

		*pData=pList->data[pList->count-1];

		//更新计数器

		pList->count--;

	}

	else if ( HEAD == offset ) //头插

	{

		

	}

	else //中间插入

	{

		

	}

	return OK;

}

/*

函数名: searchList

函数功能:查询

函数参数:

	LIST * pList : 线性表首地址

	data_t oldData : 要查找的数据

函数返回值:成功时,返回下标;失败时,返回-1。

*/		

int searchList( LIST * pList, data_t oldData )

{

	int i;

	for(i=0;i<pList->count;i++)

	{

		if(pList->data[i]==oldData)

			return i;

	}

	return ERROR;

}

/*

函数名:isEmpty

函数功能:判断表空

函数参数:LIST * pList : 线性表首地址

函数返回值:线性表为空,返回1;否则,返回0。

*/		

int isEmpty( LIST * pList )

{

	if(pList->count==0)

	{

		return TRUE;

	}

	return FALSE;
}



/*

函数名:isFull

函数功能:判断表满

函数参数:LIST * pList : 线性表首地址

函数返回值:线性表为满,返回1;否则,返回0。

*/	

int isFull( LIST * pList )

{

	if(pList->count==SIZE)

	{

		return TRUE;

	}

	return FALSE;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值