数据结构之顺序表
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; }
虽然花了很长时间,但收获挺多的
相关文章推荐
- C:数据结构与算法之顺序表
- 数据结构上机测试1:顺序表的应用
- 数据结构顺序栈的各种操作
- 数据结构实验之链表一:顺序建立链表
- 数据结构与算法-顺序查找
- 数据结构顺序栈对表达式求知算法
- 第七周【项目1】数据结构之自建算法库——顺序环形队列
- SDTU 数据结构之顺序表的应用
- 看数据结构写代码(3)顺序表的 实现
- SDUT OJ 2040 数据结构上机实验之顺序查找
- 【数据结构】——顺序循环队列的相关操作
- 数据结构之顺序表(java版)
- 数据结构之顺序表Java实现
- 数据结构与算法——线性表的顺序表示
- 数据结构中顺序表的基本操作(纯C语言)
- 数据结构(一)顺序表1:顺序存储的基本操作
- 数据结构之线性表中顺序表的基本操作
- 数据结构实验之查找六:顺序查找
- 【数据结构】顺序栈(顺序表动态实现)
- 基于完全二叉树木形成的二叉树顺序存储-数据结构(13)