当前位置:   article > 正文

数据结构1.1线性表的实现(顺序存储结构)_java将顺序存储结构线性表l中返回第i个值

java将顺序存储结构线性表l中返回第i个值

 一、

1、顺序表的优点:

(1)存储空间连续,方便随时访问; 

(2)结构简单,易于理解;

(3)易于尾插或尾删和修改;

2、顺序表的缺点:

(1)顺序存储空间容易溢出,不便扩充;

(2)插入和删除必须移动大量元素;

二、顺序表的定义:

(1)数组静态分配(一开始就定下大小):

  1. #define size 10
  2. typedef struct{
  3. char isbn[20];
  4. char name[20];
  5. float price;
  6. }Book;
  7. typedef struct{
  8. Book elem[size];
  9. int length;//当前长度
  10. }sqlist;

(2)数组动态分配:

  1. #define size 10
  2. typedef struct{
  3. char isbn[20];
  4. char name[20];
  5. float price;
  6. }Book;
  7. typedef struct{
  8. Book *elem;
  9. int length;//当前长度
  10. }sqlist;

此时就要:

  1. sqlist L;
  2. L.elem=(Book*)malloc(sizeof(Book)*size);

三、涉及的函数

(1)构造一个空的线性表

  1. int Init_list(sqlist *L)
  2. {
  3. L->elem = (Book *)malloc(sizeof(Book) * size);
  4. if (!L->elem) {
  5. exit(-1);
  6. }
  7. L->length = 0;
  8. return 1;
  9. }

(2)销毁线性表;

  1. void Destroy_list(sqlist *L)
  2. {
  3. if (L->elem) {
  4. free(L->elem);
  5. }
  6. }

(3)将线性表置空

  1. void Clear_list(sqlist *L)
  2. {
  3. L->elem = 0;
  4. }

(4)返回线性表中的元素个数(长度)

  1. int List_length(sqlist *L)
  2. {
  3. return (L->length);
  4. }

(5)判断线性表是否为空,若是返回1,不是返回0

  1. int List_empty(sqlist L)
  2. {
  3. if(L.elem==0)
  4. {
  5. return 1;
  6. }else
  7. {
  8. return 0;
  9. }
  10. }

 (6)用e返回线性表L中的第i个元素的值(1<=i<=Listlength(L))成功返回1,失败返回0 

  1. int Get_elem(sqlist *L, int i, Book *e)
  2. {
  3. if (i < 1 || i > L->length) {
  4. return 0;
  5. }
  6. *e = L->elem[i - 1];
  7. return 1;
  8. }

(7)查找与指定值相同的e的位置,若找到,返回位置序号,否则返回0 

  1. int Locate_elem(sqlist *L, Book e)
  2. {
  3. int i;
  4. for (i = 0; i < L->length; i++) {
  5. if (memcmp(&L->elem[i], &e,
  6. strlen(e.isbn) + strlen(e.name) + sizeof(e.price)) == 0) {
  7. return (i + 1);
  8. }
  9. }
  10. return 0;
  11. }

(8)在第i个位置插入数据元素e,L的长度加一 ,成功返回1,失败返回0

  1. int List_insert(sqlist *L, int i, Book e)
  2. {
  3. if (i < 1 || i > L->length + 1 || L->length == size) {
  4. return 0;
  5. }
  6. int j;
  7. for (j = L->length-1; j >= i-1; j--) {
  8. L->elem[j+1] = L->elem[j];
  9. }
  10. L->elem[i - 1] = e;
  11. L->length++;
  12. return 1;
  13. }

(9)删除第i个数据元素,L长度减一 ,成功返回1,失败返回0

  1. int List_delete(sqlist *L, int i)
  2. {
  3. if (i < 1 || i > L->length) {
  4. return 0;
  5. }
  6. int j;
  7. for (j = i; j < L->length-1; j++) {
  8. L->elem[j - 1] = L->elem[j];
  9. }
  10. L->length--;
  11. return 1;
  12. }


 

注:(1)假设线性表中每个元素有占q个存储单元,第i个数据元素的存储位置和第i+1个数据元素的存储位置之间满足关系:

       Loc(ai+1)=Loc(ai)+b            即:Loc(ai)=Loc(a1)+(i-1)*b

eg:如果每个元素占8个存储单元,ai 的存储位置是2022,则 ai+1 的存储位置是2030;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/700678
推荐阅读
相关标签
  

闽ICP备14008679号