动态顺序栈 C语言

news/2024/5/20 10:32:51 标签: 数据结构, 算法, c语言, , 顺序表

数据结构C语言动态顺序的实现和表达

动态顺序表相比于静态顺序表只是在定义上多个需要用malloc申请空间,并且释放;在结构上比静态增加了能增加最大容纳长度的函数。

#include <stdio.h>
#include <stdlib.h>  
#define Initsize 10 //静态顺序存储的最大空间 
#define OVERFLOW 1 //定义的溢出 

typedef struct 
{
	int *base;//低指针 
	int *top;//顶指针 
	int MaxSize;//当前最大容量 
}SqStack;

void InitStack(SqStack &S)//的初始化 
{
	S.base = (int*)malloc(sizeof(int)*Initsize);//申请一篇连续地址的空间 ,并使该空间的首地址返回给S.base 
	S.MaxSize = Initsize;//的最大容量赋值 
	if(S.base == NULL)//判断有没有申请到 
		exit(OVERFLOW);
	S.top = S.base; //的初始化,低和顶指向的统一位置 
}

int Push(SqStack &S,int e)//进 
{
	if(S.top-S.base==S.MaxSize)//判断是否为满 
	{
		printf("满!\n");
		return 0;
	}
	*S.top++ = e;//压入的值 
	return 0; 
}

int Length(SqStack S)//
{
	return S.top-S.base;
}

int Pop(SqStack &S)//使顶元素出,并返回顶元素,且长减一 
{
	if(Length(S))
	{
		printf("空!\n");
		return 0; 
	} 
	S.top--;//顶减一 
	return *S.top;//输出顶元素 
}

void IncreaseSize(SqStack &S,int len)//动态增加
{
	int a = Length(S),//定义一个变量a等于
		i;//循环变量 
	printf("%d  ",Length(S)); 
	int *p;
	p = S.base;//定义一个指针p指向低首元素 
	S.base = (int*)malloc(sizeof(int)*(Initsize+len));//对重新申请一个更大的连续空间 
	S.MaxSize = Initsize + len;//使的最大容量变大 
	S.top = S.base;
	for(i=0;i<a;i++)//利用循环,使老的区数据依次写入新的区中 
		*S.top++ = p[i];	
	printf("%d  ",Length(S)); 
	free(p);//最后把老的给释放了 
}

int main()
{
	SqStack S;
	InitStack(S);//初始化 
	int i;
	for(i=1;i<110;i=i+10)//利用循环使数据以此进入
		Push(S,i);//进 
	printf("当前长:%d\n",Length(S));//
	printf("顶元素:%d\n",Pop(S));
	printf("将顶元素导出后长:%d\n",Length(S));
	IncreaseSize(S,1);//增加
	free(S.base);
	return 0;
}

(完)


http://www.niftyadmin.cn/n/1580222.html

相关文章

[python]pyramid 学习5 (render)

输出json from pyramid.view import view_configview_config(rendererjson)def hello_world(request):return {content:Hello!} 或 config.add_view(myproject.views.my_view, rendererjson) 默认的render(string) from pyramid.response import Responsefrom pyramid.view imp…

栈的链表实现 C语言

数据结构c语言链式栈 代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> typedef struct StackNode {int data;struct StackNode *next; }SqStack,*LinkStack;void InitStack(LinkStack &S)//栈的初始化&#xff0c;只有创建一个栈顶结点这一…

你理解这些Cisco NAT分类和原理吗

在Cisco路由器中&#xff0c;不仅包括最常见的基于内部地址转换的静态NAT和动态NAT&#xff0c;还有基于内部目的地址转换的静态NAT和动态NAT&#xff0c;以及像基于端口地址转换的PAT&#xff08;在Cisco中称之为重载&#xff08;Overloading&#xff09;NAT&#xff09;和重叠…

静态顺序队列 C语言

数据结构c语言静态顺序队列的实现与表达 代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> #define MAXSIZE 20//静态顺序队列的最大容量 typedef struct {int data[MAXSIZE];//分配给队列一个数组空间 int front;//队列头 int rear;//队列尾 }Sq…

显示倾斜文字

定义一个单文档的mfc程序 在onDraw()方法中加入一下代码即可 CRect rcClient; GetClientRect(rcClient);//获取客户端的大小 CString str(_T("oooo...**********I am yangbo!")); pDC->SetBkMode(OPAQUE);//设置背景模式 pDC->SetTextColor(RGB(0,30,200));/…

动态顺序队列 C语言

数据结构c语言动态顺序队列的实现和表示 代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> #define InitSize 6typedef struct {int *base;//存储空间的基地址 int front;//头指针 int rear;//尾指针 int MAXSIZE;//队列存储最大值 }SqQueue;void …

50个使用标点符号设计的创意LOGO设计欣赏(上篇)

LOGO是一个企业的标志&#xff0c;人们从LOGO中可以了解到企业的理念和文化。那么&#xff0c;你是否见过使用标点符号设计的LOGO呢&#xff1f;可能大家能想到的并不多&#xff0c;实际上&#xff0c;标点符号是LOGO设计的常见元素&#xff0c;它可以让人更容易理解和留下深刻…

数据结构 队列的实现--链式

数据结构c语言链式队列的实现与表示 代码如下&#xff1a; #include <stdio.h> #include <stdlib.h>typedef struct QNode {int data;struct QNode *next; }QNode,*QueuePtr; typedef struct {QueuePtr front;//队头指针 QueuePtr rear;//队尾指针 }LinkQueue;v…