以下是我写的两个顺序表的小程序,可是我有点迷糊了,顺序表的初始化,需不需要申请结点空间呀?我觉得申请了好像没什么用啊?
程序一(申请了结点空间)
#include<stdio.h>
#include"malloc.h"
#define MAX 50
typedef struct
{ int data[MAX];
int length;
}Sqlist;
//顺序表的初始化
Sqlist InitSqlist()
{
Sqlist *a;
a=(Sqlist *)malloc(sizeof(Sqlist));//这里申请了结点空间
a->length=0;
return *a;
}
int Listinsert(Sqlist &L,int i,int e)
{
int j;
if(i<1||i>L.length+1) return 0;
for(j=L.length-1;j>=i-1;j--)
L.data[j+1]=L.data[j];
L.data[i-1]=e;
L.length++;
return 1;
}
void main(){
Sqlist L;
L=InitSqlist();
//测试插入
printf("测试插入");
Listinsert(L,1,12);
}
程序二(未申请结点空间):
#include<stdio.h>
#include"malloc.h"
#define MAX 50
typedef struct
{ int data[MAX];
int length;
}Sqlist;
//顺序表的初始化(这里边没有申请结点空间)
Sqlist InitSqlist()
{
Sqlist a;
a.length=0;
return a;
}
int Listinsert(Sqlist &L,int i,int e)
{
int j;
if(i<1||i>L.length+1) return 0;
for(j=L.length-1;j>=i-1;j--)
L.data[j+1]=L.data[j];
L.data[i-1]=e;
L.length++;
return 1;
}
void main(){
Sqlist L;
L=InitSqlist();
//测试插入
printf("测试插入");
Listinsert(L,1,12);
}
为何这两个程序测试都没有错误呀?顺序表到底需不需要申请结点空间呀?
谢谢,我在第一个中已经定义了数组,就相当于有了一些结点,那再申请结点不是多余吗?
追答你在第一个程序中定义了结构体,结构体的成员有一个是数组,但是你没有向内存申请空间,
typedef struct
{ int data[MAX];
int length;
}Sqlist;
这段语句只是单纯的定义一个结构体,给这个结构体去取一个别名,后面的
Sqlist a;才是正式的向内存申请空间。。
C语言(数据结构)顺序表的初始化需要申请结点空间。
初始化顺序表
1、/**
2、 * 初始化顺序表
3、 * 返回1 表示初始化成功
4、* 返回0 表示初始化失败
5、*/
6、int initList_sq(SqList &L) { //只有在C++中才会有引用的存在
7、 L.elem = (SeqType *) malloc(sizeof(SeqType) * LIST_INIT_SIZE);
8、 if (!L.elem)
9、 return 0; //内存分配失败,存储空间不够
10、 L.length = 0; //表示顺序表为空
11、 L.listsize = LIST_INIT_SIZE; //表示顺序表里,最大存储单元个数
分配顺序表的存储单元,初始化顺序表属性的值。
定义结构
typedef int SeqType; //存储单元类型
typedef struct{
SeqType *elem; //存储空间基地址
int length; //当前长度
int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)
} SqList;
结构体内,有三个元素:存储空间基地址,类似于数组首地址;当前长度,记录顺序表中有效存储单元个数;当前分配的存储容量,顺序表中,最多容纳的存储单元个数。当顺序表中所有存储单元已经被使用,在下次插入元素之前,需要新增存储单元。这点是数组所不具有的特性。
*注:定义一个存储单元类型SeqType是为了使顺序表适和更多数据类型,使用的时候修改SeqType类型即可。
本回答被网友采纳也就是说用数组存储元素的不需要申请结点空间对吗?数组就相当于结点空间了,而对于像单链表因为不是用数组存储的,所以需要申请结点空间来存储元素和指针对吗?
还有一个问题:
那我上边写的第二个程序才是正确的对吗?第一个程序没必要申请结点空间对吗?
typedef struct {T data;Node *next;} Node;这种写法的时候每次增加节点的时候需要去分配空间;抱歉因为前面的回答是手机上看的回答,有点答非所问。 分配空间一般是给指针变量分配的,普通变量并不需要,上面的你的两个程序差不多是一个意思,都是使用的一个节点,然后使用里面的data数组。其实你这种写法是有问题的,你是链表初始化,什么是链表 它是条可以无限延伸的链子,每个节点里面储存着你的数据,而不是一个节点里面来个数组 ,就能长度length++;你计算的可不是节点长度,而是这个data数组中存了几个数了。 因为这台机子没有VS2008不好写程序,简单写下希望能帮到你。int Listinsert(Sqlist &L,int i,int e){for(i=0;i<num;i++){这个时候每循环一次分配一次节点空间,然后再往里面插入数据,同时链表的长度+1}}
C语言(数据结构)顺序表的初始化需要申请结点空间吗?
1、\/ 2、 * 初始化顺序表 3、 * 返回1 表示初始化成功 4、* 返回0 表示初始化失败 5、*\/ 6、int initList_sq(SqList &L) { \/\/只有在C++中才会有引用的存在 7、 L.elem = (SeqType *) malloc(sizeof(SeqType) * LIST_INIT_SIZE);8、 if (!L.elem)9、 return 0; \/...
C语言(数据结构)顺序表的初始化
肯定是要分配空间的,你第一个程序的initsqlist函数中声明的结构体指针(Sqlist *a;),而第二个程序的initsqlist函数中是声明的结构体(Sqlist a;),前者只是在计算机内存中声明一个指针,而不会给这个指针分配内存空间,所以你初始化的时候要给这个指针用malloc函数分配空间,而后者是实实在在的定...
C语言数据结构顺序表初始化
C数据结构的基础是指针。好好花上几天时间把指针搞懂再来学数据结构会事半功倍。include <stdlib.h> include <stdio.h> define MAX_SIZE 100 define OK 0 define ERROR -1 typedef struct tagSqList { int element[MAX_SIZE];unsigned size;} SqList;int Initial(SqList *pL) \/\/ 定义指针变量...
顺序表的初始化
define MAXSIZE 100 typedef struct { int data[MAXSIZE];int len;}SqList;\/\/ 初始化线性表运算 void InitList(SqList *sq){ (*sq).len=0;} \/\/ 求线性表长度运算 int GetLength(SqList sq){ return sq.len;} \/\/ 求线性表中的第i个元素的运算 int GetElem(SqList sq,int i){ if(...
简述顺序表的初始化操作和插入操作的过程,计算顺序表插入过程的时间复杂...
Pi(n-i+1)指的是插入i元素以后,需要移动的元素的个数,在第一个元素后面插入元素i需要移动n个元素,在第二个元素后面插入元素i需要移动元素(n-1)个元素;依此论推,在第n个元素后面插入元素i需要移动1个元素,这是一个等差数列,首项为n,公差为1,最后一项是1,求和以后需要除以(n+1)...
数据结构顺序表的初始化,这个错误怎么改
malloc返回的指针是void *类型,需要转换类型:L->element = (ElemType *)malloc(sizeof(ElemType)*mSize);另外,你这程序写得还是很规范的,赞一下!
谁懂数据结构C语言,帮个忙吧,我整了好久都没整好,会的帮我一下谢了
\/*顺序表的初始化*\/ SeqList *init_SeqList(){ SeqList *L;L=malloc(sizeof(SeqList));L->last=-1;return L;} \/*插入数据*\/ void Insert_SeqList(SeqList *L,int i,int x){ int j;if(L->last==MAXSIZE-1){ printf("full "); \/*表空间已满无法插入*\/ exit(0) ;} if(...
详解顺序表
首先,让我们定义顺序表的基本结构:结构体定义:```htmldata (数据): 一个连续的整型数组 length (长度): 当前存储元素的数量 maxSize (最大容量): 序列表的预设最大存储元素数 ```初始化顺序表的过程至关重要,它分配连续内存,初始化长度和容量:初始化函数:```htmlvoid initSeqList(SeqList...
数据结构c语言版一道题求解
,element[n - 1]存放线性表中的元素 *\/}; typedef struct SeqList *PSeqList;PSeqList createNullList_seq(int m ) {\/* 创建新的顺序表 *\/ PSeqList palist= (PSeqList)malloc(sizeof(struct SeqList)); if (palist!=NULL){ palist->element= (DataType*)malloc(size...
数据结构 用C语言实现顺序表的建立及遍历
include <stdio.h>#include <malloc.h>typedef struct nlist{ int *np; int len;\/\/已使用地址个数 int maxlen;\/\/最大地址个数}NLT;NLT *createlist();\/\/创建顺序表int addtolist(NLT *nlist);\/\/向顺序表插入元素void pList(NLT *nlist);\/\/遍历顺序表int main(){ int i...