动态数组和栈
使用new创建动态数组时需要指定元素类型和元素个数,格式为typeName * pointer_name = new typeName[num_elements]。创建完成后,通过指针变量指向第一个元素,可以操作整个数组。释放使用new创建的数组应使用delete []。
栈是一种操作受限制的线性表,仅允许在表尾进行插入或删除操作,栈顶指向最后一个插入的元素。栈的顺序存储结构可以使用数组实现,初始化时需要指定栈的最大容量。元素的插入和删除分别对应入栈和出栈操作。
代码示例:
#define STACK_INIT_SIZE 100 // 栈的初始化大小
#define STACKINCREMENT 10 // 栈空间不够时,追加的增量
//定义栈元素类型
typedef struct{
int data;
}SElemType;
//定义栈,包含栈底指针、栈顶指针和栈的大小
typedef struct{
SElemType * base; // 栈底指针
SElemType * top; // 栈顶指针
int stacksize; // 栈的大小
}SqStack;
//初始化栈,成功返回OK
Status InitStack(SqStack &S)
{
S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElenType));
if(!S.base) exit(OVERFLOW); // 内存分配失败
S.top = S.base; // 开始时栈顶和栈底相同
S.stacksize = STACK_INIT_SIZE;
return OK;
}
//插入元素e为新的栈顶元素,成功返回OK
Status Push(SqStack &S, SElemType e)
{
if(S.top - S.base >= S.stacksize) // 栈空间不够,追加STACKINCREMENT个元素空间
{
S.base = (SElemType *)realloc(S.base,
(S.stacksize + STACKINCREMENT) * sizeof(SElemType));
if (!S.base) exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e; // 元素入栈
return OK;
}
//出栈,成功返回OK
Status Pop(SqStack &S, SElemType &e)
{
if(S.top == S.base) return ERROR; // 栈为空
e = * --S.top; // 元素出栈
return OK;
}
队列
队列是一种先进先出(FIFO)的线性表,由队列头和队列尾两个指针来表示。队列操作有入队和出队操作。为了保证高效地进行入队和出队操作,通常使用循环队列来实现队列的顺序存储结构。循环队列本质上是一个环形结构,保存元素的数组的实际大小比队列的容量小1。
代码示例:
#define MAXSIZE 100 // 队列的最大容量
//定义队列元素类型
typedef struct{
int data;
}QElemType;
//定义队列,包含队头指针、队尾指针和队列的大小
typedef struct{
QElemType * base; // 队头指针
int front; // 队头指针所在的数组下标
int rear; // 队尾指针所在的数组下标
int size; // 队列中元素的个数
}SqQueue;
//初始化队列,成功返回OK
Status InitQueue(SqQueue &Q)
{
Q.base = (QElemType *)malloc(MAXSIZE * sizeof(QElemType));
if(!Q.base) exit(OVERFLOW);
Q.front = Q.rear = 0;
Q.size = 0;
return OK;
}
//插入元素e为新的队尾元素,成功返回OK
Status EnQueue(SqQueue &Q, QElemType e)
{
if((Q.rear + 1) % MAXSIZE == Q.front) return ERROR; // 队列已满
Q.base[Q.rear] = e; // 元素入队
Q.rear = (Q.rear + 1) % MAXSIZE;
Q.size ++;
return OK;
}
//出队,成功返回OK
Status DeQueue(SqQueue &Q, QElemType &e)
{
if(Q.front == Q.rear) return ERROR; // 队列为空
e = Q.base[Q.front]; // 元素出队
Q.front = (Q.front + 1) % MAXSIZE;
Q.size --;
return OK;
}
你知道为什么你的问题没人回答么?因为没有悬赏
有了悬赏,那些你们养的蛊就都来了。
我不理解您的问题,请提供更具体的信息。