您的位置:首页 > 理论基础 > 数据结构算法

数据结构之顺序表

2013-11-27 19:25 281 查看
主函数

#include ".\HeadFile.h"
#include ".\Init.cpp"
#include ".\Insert.cpp"
#include ".\Locate.cpp"
#include ".\ShowList.cpp"
#include ".\Delete.cpp"
//函数声明

void ShowList( linear_list list);
int List_Delete(linear_list *list ,int  object_place , Elemtype *object);
int List_Locate (linear_list list , Elemtype check_object );
void Init_List( linear_list *list);
int Insert_List( linear_list *list , int  object_place , Elemtype object );

int main( void )
{
//定义变量
int check_number ,check_place;//查找元素及位置
int i,number; //输入数及计数器
int insert_number,true_number2,insert_place;//插入的数及位置
true_number2 = 1;//判断真假的数字
int delete_number,delete_place ,true_number1;
true_number1 = 1;//判断真假的数字
Elemtype exchange;//交换两个指针的中间量
/*从键盘输入20个整数填入顺序表
*
*/
//first step 初始化
linear_list list;
Init_List( &list);

//second 输入整数

for( i = 0;i < NUMBER;i++ )
{
printf("请输入第%d个整数:\n",i+1);
scanf("%d",&number);
Insert_List( &list ,i+1 ,number);
}
/*从键盘输出20个整数填入顺序表
*
*/
ShowList( list );

/*在线性表中查找某个元素
*
*/
printf("请输入你要查找的数:\n");
scanf("%d",&check_number);
check_place = List_Locate( list , check_number);
if(check_place)
printf("该元素的位置为%d\n",check_place);
else
printf("线性表中没有该元素");

/*在顺序表的头,尾,中间各插入一个元素;
输出修改后的表至屏幕;
*
*/
//插入元素
while(true_number2){
printf("请输入要插入的元素(头%d 尾%d 中间%d):\n",1,NUMBER,(NUMBER+1)/2);
scanf("%d",&insert_number);
printf("请输入插入元素的位置:\n");
scanf("%d",&insert_place);
Insert_List( &list ,insert_place ,insert_number);
printf("请选择是否继续输入(停止输入0,否则输入1):\n");
scanf("%d",&true_number2);
}
//输出修改
ShowList( list );

/*删除顺序表的前两个、中间两个和后两个元素;
输出修改后的表至屏幕;
*
*/
//删除元素
while(true_number1){
printf("\n请输入删除元素的位置:\n");
scanf("%d",&delete_place);
List_Delete(&list ,delete_place,&delete_number );
printf("请选择是否继续输入(停止输入0,否则输入1):\n");
scanf("%d",&true_number1);
}
//输出修改
ShowList( list );

/*逆序排列顺序表中的数据元素,并输出至屏幕
*
*/
// 逆序排列元素
for(i = 0;i < list.list_length/2;i ++)
{
exchange = list.elem[i];
list.elem[i] = list.elem[list.list_length - i - 1];
list.elem[list.list_length - i - 1] = exchange;
}
// 输出后的线性表如下
printf("\n逆序排列线性表如下:\n");
ShowList( list );
printf("\n");

/*
*从线性表中删除具有最小值的元素并由函数返回,空出的位置由最后一个元素填补,
*
*	若线性表为空则显示出错信息并退出运行
*/
//判空

//找出最小值的元素
//然后删除并填补空出的元素
return OK;
}
//定义一个用于初始化线性表的函数
void Init_List( linear_list *list)
//参数利用返回列表,不使用形参
{
//分配存储空间
list->elem = (Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));
if(!list->elem)
exit(FAIL);
list->list_length = 0; //插就要入一个元素,length加一,当length = listsize 时,表示存储空间已满,就要加存储空间
list->list_size= LIST_INIT_SIZE;
}



//定义一个用于初始化线性表的函数
//给初始化好的线性表插入所需要的元素
int Insert_List( linear_list *list ,int object_place , Elemtype object )  //需要传递线性表(利用指针类型以便于彻底修改),插入元素,及插入元素的位置三个参数
{
Elemtype *new_elem;
int i;
//判断所插入元素的位置是否正常
if(object_place < 1||object_place > list->list_length+1) //插入元素的位置在1-length之间或最后一个元素之后
return ERROR;
//判断存储空间是否足够
if( list->list_length >= list->list_size )
{
new_elem = (Elemtype *) realloc( list->elem ,(list->list_size+INCREMENT_SIZE)*sizeof(Elemtype));
if(!new_elem)
exit(FAIL);
list->elem = new_elem;
list->list_size +=INCREMENT_SIZE;
}
//利用数组的下标来插入元素
for(i = list->list_length-1;i >= object_place-1 ; i--)
{
list->elem[i+1] = list->elem[i];
}
list->elem[object_place-1] = object;
list->list_length++;
return OK;
}



int List_Locate (linear_list list , Elemtype check_object )
{
int place = 0;
int i = 0;
for( i = 0;i < list.list_length ;i++ )
{
if( list.elem[i] == check_object )
{
place = i + 1;
break;
}
}
return place;
}



//打印整个线性表
void ShowList( linear_list list)
{
int i;
printf("\n打印线性表如下:\n");
for(i = 0;i < list.list_length ;i++)
{
printf("%5d",list.elem[i]);
if(!((i+1)%5))
putchar('\n');
}
}



//删除线性表中的元素
int List_Delete(linear_list *list ,int  object_place , Elemtype *object) //object为了保存删除的元素
{
int i;
//判断所插入元素的位置是否正常
if(object_place < 1||object_place > list->list_length+1) //插入元素的位置在1-length之间或最后一个元素之后
return ERROR;
//保存删除的元素
*object = list->elem[object_place-1];
//删除元素并移动剩下元素
for(i = object_place-1;i < list->list_length-1 ; i++)
{
list->elem[i] = list->elem[i+1];
}
//question unsolved
list->list_length--;

return OK;
}


虽然花了很长时间,但收获挺多的

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: