数据结构的一份代码,希望热心人帮忙解答一下

本人刚上大一,自学完了C语言,现在自学大二的数据结构,这份代码看不懂,求帮忙围绕这份代码写一份详细的解释,并把注释给加上,很感谢,给分!
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#define LISTINCREASMENT 100 /*每次分配元素的个数*/
#define LISTSIZE 10 /*顺序存储的最大个数*/

typedef int ElemType;

typedef struct /*顺序表元素的的定义*/
{
ElemType * elem;
int length;
int listsize;
} Sqlist;

void SqInitial(Sqlist *ps) /*初始化线性表*/
{
ps->elem=(ElemType *) malloc (LISTSIZE*sizeof(ElemType));
ps->length=0;
ps->listsize=LISTSIZE;
}

void ListInsert(Sqlist *ps,int i,ElemType e) /*插入元素*/
{
if(i<1) printf("ERROR!");
if(ps->length>=ps->listsize)
{
ElemType*newbase=(ElemType*)realloc(ps->elem,(ps->listsize+LISTINCREASMENT)
*sizeof(ElemType));
ps->elem=newbase;
ps->listsize+=LISTINCREASMENT; /*表的容量不足分配内存*/
}
ElemType * q=&(ps->elem[i-1]);
ElemType * p;
for(p=&(ps->elem[ps->length-1]); p>=q; --p)
*(p+1)=*p;
*q=e;
++ps->length;

}

void ListDelete(Sqlist *ps,int i,ElemType &e) //删除线性表中第i个位置上的元素
{
if(i<1||i>ps->length) printf("ERROR!");
else
{
e=ps->elem[i-1];
for(;i<ps->length;i++)
{
ps->elem[i-1]=ps->elem[i];
}
ps->length--;
}

}

ElemType GetElem(Sqlist *ps,int i)
{
if(i<1||i>ps->length) printf("ERROR!");
else
{
return ps->elem[i-1];
}
}

int main()
{
Sqlist *L;
int t =1 ,d;

L=new Sqlist;
SqInitial(L);
printf("构建长度为7的顺序表。\n");
for(t=1; t<=7; t++) /*构建长度为7的顺序表*/
{
printf("Please input the %dth list elem:",t);
scanf("%d",&d);
ListInsert(L,t,d);
}

printf("表长: %d\n",L->length); /*输出表长*/

for(t=1; t<=L->length; t++)
printf("%d ",L->elem[t-1]);/*读表*/

printf("\n删除的位置:"); //删除元素
scanf("%d",&t);
ListDelete(L,t,d);
printf( "删除元素的值:%d\n",d);
printf( "删除后的表:");
for(t=1; t<=L->length; t++)
printf("%d ",L->elem[t-1]); //删除后的表

printf("\n要插入的位置"); //插入元素
scanf("%d",&t);
printf("要插入的值");
scanf("%d",&d);
ListInsert(L,t,d);
printf( "插入以后的表:");
for(t=1; t<=L->length; t++) //插入以后的表
printf("%d ",L->elem[t-1]);
printf("\n要检索的元素的位置:"); //检索元素
scanf("%d",&t);
d=GetElem(L,t);
printf( "该元素的值为:%d\n",d);
}

这个是最基础的了。。。自学的是严的教材么? 这样也很难跟你解释,我只挑一些可能稍微难懂的地方说一下吧。
typedef 可以理解为自定义类型的名字 如typedef int ElemType;然后我ElemType a; 就相当于 int a;
同理 代码中的
typedef struct /*顺序表元素的的定义*/
{
ElemType * elem;
int length;
int listsize;
} Sqlist;
是将此结构体起了个自定义的名字,这个名字就是Sqlist。那代码后面的诸如Sqlist *s ,就是定义了一个这个结构体的指针。
这里用到了malloc和realloc函数。malloc函数就是向我们的电脑申请一段内存空间,用作存储我们的数据。realloc就是重新分配一下这个空间的大小。具体使用规则可以百度一下,资料很多。

for(p=&(ps->elem[ps->length-1]); p>=q; --p)
*(p+1) =*p
*q=e;
这个循环的意思是让指针p等于链表的最后一位,并且指针逐渐前移。每次都让后一位的值等于前一位,起到了将这段上的表后移一位的作用。然后插入你要的元素。
&是取地址的符号。

剩下的具体就是一些对这个链表的增删查改的各种函数。具体逻辑要你自己仔细看一看了,当然如果动手稍微改一改的话学的会更快。
如果结构体和指针的概念还不明确,C语言那本书可以再翻一翻。
有什么细节不懂的可以追问。
温馨提示:内容为网友见解,仅供参考
无其他回答

数据结构的一份代码,希望热心人帮忙解答一下
int length;int listsize;} Sqlist;是将此结构体起了个自定义的名字,这个名字就是Sqlist。那代码后面的诸如Sqlist *s ,就是定义了一个这个结构体的指针。这里用到了malloc和realloc函数。malloc函数就是向我们的电脑申请一段内存空间,用作存储我们的数据。realloc就是重新分配一下这个空间的大小。

《数据结构》考试复习希望各位高手帮忙解答, 马上要考试了,.急急急...
4. 数据的运算最常用的有5种,插入, 删除,5. 时间复杂度 空间复杂度 6. n*(n-1)\/2 ?7. ???8.n-i+1 9.n-i 10.5 11.32 12.350 (n0+n1+n2=700 n=n2+1 n1只能去0 或1 所以,700=2n0- 1+n1 所以 n1=1 n0=350)13.快速排序 14.线性有序表(...

C语言好学吗谢谢了,大神帮忙啊
第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。 第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的windows,Unix,Linux,Mac,os\/2,没有一个里外的,如果你不懂C...

有没有数据结构的高人帮忙解答这个问题,为什么clock函数的返回者都是0...
是clock_t 一般系统定义是unsigned int 还有一种可能,就是你的Bubblesort这个函数的时间的确非常短 不到1毫秒

...弟弟,姐姐,妹妹帮忙看一下,帮助我解答一下,非常感谢了!
数据结构试题 一、填空题 1、数据类型分为(线性)数据类型和(非线性)数据类型。2、算法是一个有关指令的有限集合,它须符合(有穷性)、(正确性)、(可行性)等准则。3、若英文字母表(A,B,C,——Z)是一个线性表。其结点是单个字母,该线性表共有(26)个结点。通常用前缀和后继来...

数据结构里什么是字典序什么是标准序,帮忙解答一下,举个例子
标准序: 短在前,长在后,等长的依次比字 母, 如to < up < cap < cat < too < two < boat < boot < card 字典序: 依次比字母, 如boat < boot < cap < card < cat < to < too< two < up

python文件共有多少行多少个空格(2023年最新解答)
源文件大约一个在1~2MB左右,比较小,所以可以直接读入内存处理。 既然是处理excel,何况他们整个组显然都是win下干活(数据都用excel存了==,商科的人啊……),这个脚本还是在win下做吧 这个任务完全不需要我对现有的文件做修改!囧……我只要读入、处理、再写出另一个文件就行了 学习使用 嗯,就是打开cmd,然后用pyt...

数据结构线性表几个基本操作无法实现,大神们来帮忙解决一下
在今天这第一篇文章里,我来探讨一下数据结构的基本概念。作者一开篇就归纳了计算机解题的一般步骤:逗首先要从具体问题抽象出一个适当的数学模型,然后设计一个解此数学模型的算法,最后编出程序,进行测试、调试直至得到最终解答。地我把它再进一步归纳一下,就是:抽象数学模型——设计算法——编写程序。这个思路非常...

...顺便解答一下,感激不尽,可以帮忙的留下邮 箱,谢谢!
我觉得这个方面肯定会问到,但是由于答辩时间有限并不会给你过多时间思考,也不会问太多的问题,所以这个方面你应该好好准备一下:;1、C语言基本概念,主要是程序循环,各个语句的表达语法及意义(这个是基本的);2、设计的总体思路,达到的目的结果;3、设计的过程,从主函数开始写程序...然后程序...

问一个系统的问题?
例六:一个朋友发信息过来,我的电脑便出现了错误信息:“0x772b548f”指令引用的“0x00303033”内存,该内存不能为“written”,然后QQ自动下线,而再打开QQ,发现了他发过来的十几条的信息。 解决方法:这是对方利用QQ的BUG,发送特殊的代码,做QQ出错,只要打上补丁或升级到最新版本,就没事了。收集了些资料希望对你...

相似回答