#include "stdafx.h"
#include<stdlib.h>
#include<Windows.h>
int*p = NULL;
int len = 0;
void print();//遍历
void push(int data);//新增加数据
void pop_Stack();//出栈
void pop_Queue();//出队列
int get_Top();//获取栈顶元素
int get_Queue();//获取队列元素
int main()
{
printf("original:");
for (int i = 0; i<9; i++)
{
push(i + 1);
}
print();//遍历
printf("Queue: ");
while (len)
{
Sleep(500);
printf("%d ", get_Queue());
pop_Queue();
}
printf("\n");
printf("Stack: ");
for (int i = 0; i<9; i++)
{
push(i + 1);
}
while (len)
{
Sleep(500);
printf("%d ", get_Top());
pop_Stack();
}
printf("\n");
system("pause");
return 0;
}

//入栈 入队
void push(int data)
{
//1.新开内存
int* pNew = (int*)malloc((len + 1)*sizeof(int));
//2.判断原来是否有数据
if (p)
{
//3.如果有数据,则拷贝到新开内存中
memcpy(pNew, p, sizeof(int)*len);
//4.释放原有内存
free(p);
}
//5.p指向新开内存
p = pNew;
//6.数据放到最后,len加一
p[len++] = data;
}
//出队
void pop_Queue()
{
if (p == NULL)
{
printf("队列没有了!\n");
return;
}
if (len == 1)
{
free(p);
p = NULL;
len--;
return;
}
//新开内存
int* pNew = (int*)malloc(sizeof(int)*(len - 1));
//拷贝数据到新开内存
memcpy(pNew, p + 1, sizeof(int)*(len - 1));
//释放原有内存
free(p);
//p指向新内存
p = pNew;
//len减一
len--;
}
//获取队列第一个元素
int get_Queue()
{
return p[0];
}
//获取栈顶元素
int get_Top()
{
return p[len - 1];
}
//出栈
void pop_Stack()
{
//判断能否出栈
if (p == NULL)//防御性编程
{
printf("栈空了!\n");
return;
}
if (len == 1)
{
free(p);
p = NULL;
len--;
return;
}
//新开内存
int* pNew = (int*)malloc(sizeof(int)*(len - 1));
//拷贝数据
memcpy(pNew, p, sizeof(int)*(len - 1));
//释放原有数据
free(p);
//p指向新开内存
p = pNew;
//len-1
len--;
}
//遍历
void print()
{
for (int i = 0; i < len; i++)
{
printf("%d ", p[i]);
}
printf("\n");
}
9.栈与队列的简单应用
最新推荐文章于 2024-07-20 08:07:47 发布