首页 > 其他 > 详细

数据结构之顺序存储

时间:2020-09-20 20:31:25      阅读:41      评论:0      收藏:0      [点我收藏+]
  1. # include <stdio.h>
  2. # include <stdlib.h>
  3. #define OK 1
  4. #define OVERFLOW 0
  5. #define LIST_INIT_SIZE 100 //可以存放的数据个数
  6. #define LISTINCREMENT 10
  7. typedef struct {
  8. char *elem; //这个char 可以替换成其它数据类型
  9. int length; //当前这个顺序表的长度
  10. int listsize; //线性表的长度
  11. }SqList;
  12. int InitList(SqList &L)
    {
    L.elem = (char *)malloc(LIST_INIT_SIZE*sizeof(char));//动态分配了可以存放100个元素的内存空间,并将首地址赋值给指针变量elem;
    if(!L.elem)//表示的是内存分配失败
    exit(OVERFLOW);
    L.length = 0;
    L.listsize = LIST_INIT_SIZE;
    return OK;
    }

  13. int main(void)
    {
    int y;
    SqList L;
    y = InitList(L);
    printf("y=%d",y);
    return 0;
    }技术分享图片

                                               上图是线性表分配成功的标志

//个人看法:这种线性表的初始化就是按照结构题的知识找到elem,以及指针将数据放入一段连续的elem为首地址的内存空间中

  1. 2 元素插入

 

int ListInsert(SqList &L,int i,char e)
{
if (i<1||i>L.length)
return -1;
char * newbase;
char *p ,*q;
if(L.length >= L.listsize)//就是比较的是顺序表中存储的数是否达到这个线性表的最大值
{
newbase = (char *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(char));//相当于又在原有100个存储单位上有添加了10个存储单位的大小
if(!newbase)
exit(OVERFLOW);
L.elem = newbase;
L.listsize+=LISTINCREMENT;
}
q = &(L.elem[i-1]);//q为第i个元素
for (p = &(L.elem[L.length-1]);p>=q;p--)
*(p+1) = *p;
*q = e;
L.length ++;
return OK;
}技术分享图片

 

 

  1.                      上图是将元素‘a‘插入成功示意图
  2. //原理就是将你想要插入的元素对应位置的的地址保存在指针变量中q中;将q后元素全部往后移动一位,使用的是*(p+1) = *p这句话的意思是将p的地址赋值给p+1这样就可以实现将q后面的数据往后移动一位,最后因为插入了一个数据,所以要将当前顺序表的长度+1;
  3. 未完请待续…………

 

数据结构之顺序存储

原文:https://www.cnblogs.com/zqit/p/13697413.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!