社区
C语言
帖子详情
如何动态初始化顺序表
xiaha3
2003-11-22 02:09:42
如何动态初始化顺序表
struct SeqList{
DataType data[ListSize];//向量data用于存放表结点
int length;//当前的表长度
};
我想在程序运行是确定data的长度,也就是ListSize,怎么办.
...全文
276
6
打赏
收藏
如何动态初始化顺序表
如何动态初始化顺序表 struct SeqList{ DataType data[ListSize];//向量data用于存放表结点 int length;//当前的表长度 }; 我想在程序运行是确定data的长度,也就是ListSize,怎么办.
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiaha3
2003-11-22
打赏
举报
回复
不好意思,前面的我业应该给分.对不起了,下回的把
xiaoyige886
2003-11-22
打赏
举报
回复
哦 对了,多了一个交集的代码 void Intersect(SqList A,SqList B,SqList &C)
你把他删除就可以程序就可以通过了
xiaoyige886
2003-11-22
打赏
举报
回复
#include <stdio.h>
#include <malloc.h>
#include<stdlib.h>
#include<assert.h>
#include<iostream>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int ElemType; //自定义类型
typedef struct {
ElemType *elem; //元素
int length; //数组可用长度
int listsize; //数组总长度
} SqList;
/*函数:IsValidList
功能:验证顺序表的合法性
参数:顺序表指针
返回值:int
非0值:合法
0:非法
*/
int IsValidList(SqList* AList)//判断顺序表是否合法
{
return AList != NULL &&
AList->length >= 0 &&
AList->listsize >= AList->length &&
AList->elem != NULL;
}
int ListInit(SqList* AList)
{
AList->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (AList->elem == NULL)
return 0;
else
{
AList->listsize = LIST_INIT_SIZE;
AList->length = 0;
return 1;
}
}
*/
函数:ListSetLength
功能:设置表的长度;可能会导致内存重分配。
参数:
SqList* AList:顺序表指针;必须是有效链表。
int NewLength:新的表长;必须>=0。
返回值:int
1:成功。
0:失败。
*/
int ListSetLength(SqList* AList, int NewLength)
{
ElemType* NewElem;
int NewSize;
assert(NewLength>=0);
assert(IsValidList(AList));
if (NewLength > AList->listsize)
{
NewSize = (NewLength + LISTINCREMENT - 1) / LISTINCREMENT * LISTINCREMENT;
NewElem = (ElemType*) realloc(AList->elem, NewSize * sizeof(ElemType));
if (NewElem == NULL)
return 0;
else
{
AList->elem = NewElem;
AList->listsize = NewSize;
AList->length = NewLength;
return 1;
}
}
else
{
AList->length = NewLength;
return 1;
}
}
void ListClear(SqList* AList)
{
assert(IsValidList(AList));
free(AList->elem);
//以下操作是完全的实现,实际也可以不用或只在调试版本使用
AList->elem = NULL;
AList->length = 0;
AList->listsize = 0;
}
//求交集
void Intersect(SqList A,SqList B,SqList &C)
{
int i = 0;
int j = 0;
int k = 0;
ListSetLength(&C, min(B.length,A.length);//交集长度一定不长于两个集合长度的最小值。
while(i < A.length && j < B.length)
{
if(A.elem[i]< B.elem[j])
i++;
else if(A.elem[i]> B.elem[j])
j++;
else
{
C.elem[k++]= A.elem[i];
i++;
j++;
}
}
ListSetLength(&C, k);//重设交集长度。
}
void Print(SqList *Arr)
{
for (int i = 0; i < Arr->length; ++i)
printf("%d ", Arr->elem[i]);
printf("\n");
}
int main()
{
SqList list,qlist,plist;
int a[5] = {1,3,5,6,7};
int b[5] = {3,5,6,7,10};
ListInit(&list);
ListInit(&qlist);
ListInit(&plist);
ListSetLength(&list,5);
ListSetLength(&qlist,5);
for(int i = 0; i<5; ++i)
list.elem[i] = a[i];
for(int i = 0; i<5; ++i)
qlist.elem[i] = b[i];
Intersect(list,qlist,plist);
Print(&plist);
system("pause");
}
这是csdn数据结构专题活动的题解
在次特别感谢!
plainsong(短歌)
lishifeng
2003-11-22
打赏
举报
回复
把结构改了用就行了
struct SeqList{
DataType *pData;//指针pData用于指向存放表结点的内存
int ListSize; //最大长度
int length;//当前的表长度
};
JerryJun
2003-11-22
打赏
举报
回复
用模板,也只是在编译状态, 不能满足“我想在程序运行是确定data的长度,也就是ListSize,怎么办.”的条件
template <class T,int nInitSize,int nExtendSize>
class seqlist{
int length;//当前长度
int size;//容量
T * pData;//
seqlist(){
length = 0;
pData = new T[nInitSize];
size = nInitSize;
}
Add(const T& _t){
if(length + 1 < size){
pData[length] = _t;
length++;
}else{
T* pTemp = new T[size+ nExtendSize];
size = length + nExtendSize;
for(int i = 0;i<length;i++){
pTemp[i] = pData[i];
}
delete[] pData;
pData = pTemp;
pData[length] = _t;
length++;
}
}
}
liuleilover
2003-11-22
打赏
举报
回复
做一个模板类
如:
template <class DataType,int ListSize>
class SeqList
{
DataType data[ListSize];
int length;
};
调用时可以用
SeqList<char,int>* plist=new SeqList<char,5>;
你可以试一试.
顺序表
初始化
1.1.
顺序表
的
初始化
顺序存储结构需要如下三个属性: 存储空间的起始地址:数组的起始地址
顺序表
的最大存储容量:数组长度size
顺序表
的当前长度,也就是表中存储数据元素的个数:length 自定义
顺序表
结构的C...
【数据结构入门】
顺序表
(SeqList)详解(
初始化
、增、删、查、改)
文章目录(1)线性表(2)
顺序表
1)什么是
顺序表
2)
顺序表
的定义2)
顺序表
的接口实现1、
初始化
顺序表
2、销毁(释放)
顺序表
3、检查
顺序表
容量是否满了,好进行增容3、
顺序表
尾插4、
顺序表
尾删5、
顺序表
头插6、顺序...
顺序表
的
初始化
顺序表
的
初始化
主要是对当前
顺序表
长度的
初始化
,也可以给每个数据元素赋初值,如果不赋初值的话不要打印申请空间的全部元素。全部打印出来的话会出现之前内存中的脏数据。如果一定要打印的话就打印到length当前长度...
C++如何
初始化
顺序表
顺序表
可以使用以下代码
初始化
: #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100 typedef struct { int data[MAX_SIZE]; int length; } SequenceList; void init(SequenceList *L) ...
数据结构–
顺序表
(创建
初始化
)
数据结构–
顺序表
(创建
初始化
)
顺序表
和链表不同,
顺序表
类似数组,...2.创建实现不同功能的函数:
初始化
顺序表
的函数、打印
顺序表
的函数 3.主函数 调用以上实现个功能的函数 如下: #include <stdio.h> #inc
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章