社区
C语言
帖子详情
如何动态初始化顺序表
xiaha3
2003-11-22 02:09:42
如何动态初始化顺序表
struct SeqList{
DataType data[ListSize];//向量data用于存放表结点
int length;//当前的表长度
};
我想在程序运行是确定data的长度,也就是ListSize,怎么办.
...全文
268
6
打赏
收藏
如何动态初始化顺序表
如何动态初始化顺序表 struct SeqList{ DataType data[ListSize];//向量data用于存放表结点 int length;//当前的表长度 }; 我想在程序运行是确定data的长度,也就是ListSize,怎么办.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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>;
你可以试一试.
Linux0.11内核
初始化
讲解与调试
结合bochs仿真调试工具边讲解边调试linux0.11版本内核
初始化
过程,通过该课程可以学习和理解关于linux内核在内存中的分布、分段及分页机制、逻辑地址线性地址及物理地址的区别,更系统的理解CPU实模式及保护模式等。...
顺序表
初始化
1.1.
顺序表
的
初始化
顺序存储结构需要如下三个属性: 存储空间的起始地址:数组的起始地址
顺序表
的最大存储容量:数组长度size
顺序表
的当前长度,也就是表中存储数据元素的个数:length 自定义
顺序表
结构的C...
顺序表
的
初始化
顺序表
的
初始化
主要是对当前
顺序表
长度的
初始化
,也可以给每个数据元素赋初值,如果不赋初值的话不要打印申请空间的全部元素。全部打印出来的话会出现之前内存中的脏数据。如果一定要打印的话就打印到length当前长度...
【数据结构入门】
顺序表
(SeqList)详解(
初始化
、增、删、查、改)
文章目录(1)线性表(2)
顺序表
1)什么是
顺序表
2)
顺序表
的定义2)
顺序表
的接口实现1、
初始化
顺序表
2、销毁(释放)
顺序表
3、检查
顺序表
容量是否满了,好进行增容3、
顺序表
尾插4、
顺序表
尾删5、
顺序表
头插6、顺序...
数据结构–
顺序表
(创建
初始化
)
数据结构–
顺序表
(创建
初始化
)
顺序表
和链表不同,
顺序表
类似数组,...2.创建实现不同功能的函数:
初始化
顺序表
的函数、打印
顺序表
的函数 3.主函数 调用以上实现个功能的函数 如下: #include <stdio.h> #inc
C语言
69,379
社区成员
243,075
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章