SequenceList(顺序表)

来源:互联网 发布:网络加速器翻墙 编辑:程序博客网 时间:2024/04/28 10:33
#include <stdio.h>#include <stdlib.h>#include <malloc.h>//定义几个常量#define LIST_INIT_SIZE  100//线性表存储空间的初始分配量#define LIST_INCREMENT  10//线性表存储空间的分配增量//线性表的声明,并定义其类型为linear_listtypedef struct{int *p;//p=null;//此指针用来动态开辟空间int length;//用来存储线性表的长度int list_size;//用来存储开辟的线性表的空间}linear_list;//此函数用来创建一个线性表int creat_linear_list(linear_list  *list){list->p = (int *)malloc(LIST_INIT_SIZE*sizeof(int));//为list表动态开辟空间if (list->p == NULL){printf("线性表创建失败");exit(0);//线性表创建失败}list->length = 0;list->list_size = LIST_INIT_SIZE;return 1;}//此函数用来在线性表中插入或添加一个新元素int insert_element(linear_list *list, int i,int e){//在线性表list的i位置插入元素eint j;//j用来为for循环计数if (list->length >= list->list_size)//判断空间是否有空余{list->p = (int *)realloc(list->p, (list->list_size + LIST_INCREMENT)*sizeof(int));printf("空间已满,已为您增加空间分配");}if (list->p == NULL)//判断链表是否为空{printf("顺序表为空\n");system("pause");exit(0);}if (i<1 || i>list->length+1)//判断位置i是否合法(因为将插入与添加功能融在此函数。故i>list->length+1){printf("插入位置不合法");system("pause");exit(0);}for (j = list->length-1; j >= i-1; j--){list->p[j + 1] = list->p[j];//后移}list->p[i - 1] = e;//将e插入到i位置list->length++;//长度+1return 1;}//此函数用于线性表的删除int delete_element(linear_list  *list, int i){//在线性表中删除第i个元素int j;//j用来为for循环计数if (list->p == NULL)//判断线性表是否为空{printf("顺序表为空");system("pause");exit(0);}if (i<1 || i>list->length)//判断位置i是否合法{printf("删除位置不合法");system("pause");exit(0);}for (j = i - 1; j <= list->length - 2; j++){list->p[j] = list->p[j + 1];//前移}list->length--;//线性表长度减一return 1;}//主函数用来测试void main(){int i;//计数器,用于for循环linear_list *list;//定义一个指向线性表的指针list = (linear_list *)malloc(sizeof(linear_list));creat_linear_list(list);//调用creat_linear_list(list)函数创建这个线性表insert_element(list, 1, 1);//在1位置插入1insert_element(list, 2, 2);//在2位置插入2insert_element(list, 3, 4);//在3位置插入4insert_element(list, 3, 3);//在3位置插入3printf("此时,线性表有%d个元素,分别为:", list->length);for (i = 0; i < list->length;i++)printf("%d",list->p[i]);delete_element(list, 3);printf("\n删除操作后,线性表有%d个元素,分别为:", list->length);for (i = 0; i < list->length; i++)printf("%d", list->p[i]);system("pause");}
0 0
原创粉丝点击