|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- // 创建一个线性表的数据类型 参数:【数组 , 元素个数 , 内存空间】
- struct list{
- int *arr;
- int len_list;
- int com_list;[b][b][/b][/b]
- };
- void init_list( struct list *st ); // 初始化一个空表: 分配内存
- void clear_list( struct list *st ); // 清空线性表
- bool empty_list( struct list *st ); // 判断线性表是否为空
- bool get_elem( struct list *st , int pos , int *e ); // 获取线性表某个位置的值
- void insert_list(struct list *st , int num ); // 插入一个元素
- void show_list( struct list *st ); // 打印线性表
- int main()
- {
- struct list A;
- int ii , a1;
- init_list(&A); // 初始化线性表
- for(ii=0 ; ii<15 ; ii++ ) // 为线性表赋值
- {
- insert_list(&A , ii);
- }
- show_list(&A);
- clear_list(&A); // 清空线性表
- printf("leng=%d , comp=%d\n" , A.len_list , A.com_list);
- return 0;
- }
- void show_list( struct list *st ) // 打印线性表
- {
- if( (st->len_list) == 0 ) { printf("空表\n"); return; }
- int ii=0;
- for( ii=0 ; ii<(st->len_list) ; ii++)
- {
- printf("%d " , st->arr[ii]);
- }
- printf("\n");
- }
- void insert_list(struct list *st , int num ) // 插入一个元素
- {
- // 判断内存空间是否充足 添加空间
- if( (st->len_list) == (st->com_list) )
- {
- struct list tmp; // 申请一个临时结构体 扩充线性表空间
- int ii;
- tmp.len_list = 0;
- tmp.com_list = (st->com_list)+10;
- tmp.arr = (int*)malloc( (st->com_list)*sizeof(int) );
- // 为临时结构体赋值
- for(ii=0 ; ii<(st->com_list) ; ii++)
- {
- tmp.arr[ii] = (st->arr)[ii]; tmp.len_list++;
- }
- // 释放内存
- free(st->arr); st->com_list=st->len_list=0; 我这里释放旧的内存空间
- st->arr = tmp.arr; st->com_list = tmp.com_list; st->len_list=tmp.len_list; 给指针重新指定一个新的空间的用法是不是不对
- }
- st->arr[st->len_list] = num;
- st->len_list++;
- return;
- }
- bool get_elem( struct list *st , int pos , int *e ) // 获取线性表某个位置的值
- {
- // 查找的值不在范围内
- if( pos<=0 || pos>(st->len_list) ) { return false; }
- *e = (st->arr)[pos]-1;
- return true;
- }
- bool empty_list( struct list *st ) // 判断线性表是否为空
- {
- if( (st->len_list) == 0 ) return true;
- return false;
- }
- void clear_list( struct list *st ) // 清空线性表
- {
- st->len_list = 0;
- st->com_list = 0;
- free(st->arr);
- }
- void init_list( struct list *st ) // 初始化一个空表
- {
- int ii=0;
- // 首先为空表分配10个数据空间
- st->com_list = 10;
- st->len_list = 0;
- st->arr = (int*)malloc(( st->com_list)*sizeof(int));
- // 赋值为0
- for(ii=0 ; ii<st->com_list ; ii++) (st->arr)[ii] = 1;
- }
复制代码
在添加元素的时候 扩充数组长度就报错 请问有大神知道是为什么 |
|