用链表实现栈和队列.docx

上传人:b****6 文档编号:8621729 上传时间:2023-02-01 格式:DOCX 页数:9 大小:32.65KB
下载 相关 举报
用链表实现栈和队列.docx_第1页
第1页 / 共9页
用链表实现栈和队列.docx_第2页
第2页 / 共9页
用链表实现栈和队列.docx_第3页
第3页 / 共9页
用链表实现栈和队列.docx_第4页
第4页 / 共9页
用链表实现栈和队列.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

用链表实现栈和队列.docx

《用链表实现栈和队列.docx》由会员分享,可在线阅读,更多相关《用链表实现栈和队列.docx(9页珍藏版)》请在冰豆网上搜索。

用链表实现栈和队列.docx

用链表实现栈和队列

数据结构与算法分析

实验二

•实验报告

姓名:

XXXXXXXXXX

学号:

XXXXXXXXXX

班级:

CCCCCCCCCC

实验二

(1)用链表实现栈

、实验描述用链表实现一个栈。

二、实验设计

1.进栈(PUSH算法

1若TOP>n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);

2置T0P=T0P+1(栈指针加1,指向进栈地址);

3S(TOP)=X,结束(X为新进栈的元素);

2.退栈(POP算法

1若TOPW0,则给出下溢信息,作出错处理(退栈前先检查是否

已为空栈,空则下溢;不空则作②);

2X=S(TOP),(退栈后的元素赋给X):

3TOP=TOP-1,结束(栈指针减1,指向栈顶)。

三、实验实现代码

#include#include#defineDataTypeint#defineMAXSIZE1024typedefstruct{

DataTypedata[MAXSIZE];inttop;

}SeqStack;

//栈初始化

SeqStack*lnit_SeqStack(){

xxxxxxxxxxx数据结构实验报告•实验

SeqStack*s;

s=(SeqStack*)malloc(sizeof(SeqStack));if(!

s){

printf(”空间不足\n");

returnNULL;

}

else{

s->top=-1;

returns;

}

}

//判栈空

intEmpty_SeqStack(SeqStack*s){if(s->top==-1)return1;

else

return0;

}

//入栈

intPush_SeqStack(SeqStack*s,DataTypex){if(s->top==MAXSIZE-1)return0;//栈满不能入栈

else

{

s->top++;

s->data[s->top]=x;

return1;

}

}

//出栈

intPop_SeqStack(SeqStack*s,DataType*x){if(Empty_SeqStack(s))

return0;//栈空不能出栈

else

{

*x=s->data[s->top];

s->top--;

return1;

}//栈顶元素存入*x,返回

}

//取栈顶元素

DataTypeTop_SeqStack(SeqStack*s){if(Empty_SeqStack(s))

return0;//栈空

else

returns->data[s->top];

}

intPrint_SeqStack(SeqStack*s){

inti;

printf("当前栈中的元素:

\n");

for(i=s->top;i>=0;i--)

printf("%3d",s->data[i]);

printf("\n");

return0;

}

intmain(){

SeqStack*L;

intn,num,m;

inti;

L=lnit_SeqStack();

printf(”初始化完成\n");

printf(”栈空:

%d\n",Empty_SeqStack(L));

printf("请输入入栈元素个数:

\n");

scanf("%d",&n);

printf("请输入要入栈的%d(元素:

\n",n);

for(i=0;i

scanf("%d",&num);

Push_SeqStack(L,num);

}

Print_SeqStack(L);

printf("栈顶元素:

%d\n",Top_SeqStack(L));

%d个):

printf("请输入要出栈的元素个数(不能超过

\n",n);

scanf("%d",&n);

printf("依次出栈的%d(元素:

\n",n);

for(i=0;i

Pop_SeqStack(L,&m);

printf("%3d",m);

}

printf("\n");

Print_SeqStack(L);

printf("栈顶元素:

%d\n",Top_SeqStack(L));return0;

}

四、实验结果

嗣始化宪成

扶空・i

请输人入栈元素个数I

情输入熨入栈的「卜元素:

23

4

42

当前栈屮的元泰

473444523

请输人第出磯的元盍个数(不能趙过5心柱欣出槎知个元茅:

4?

34445

当前栈中肉元素:

23

栈顶元素;财

IVg33sykeyt<*^on^iniuc

实验二

(2)用链表实现队列

一、实验描述

用链表实现一个队列。

二、实验设计

队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。

进行插入操作的端称为队尾,进行删除操作的端称为队头。

队列中没有元素时,称为空队列。

在队列这种数据结构中,最先插入的元素将是最先

被删除的元素;反之最后插入的元素将最后被删除的元素,因此

队列又称为“先进先出”(FIFO—firstinfirstout)的线性表。

队列空的条件:

front=rear队列满的条件:

rear=MAXSIZE

三、实验实现代码

#include

#include

typedefstructQNode

{

intdata;

structQNode*next;

}QNode;

typedefstructQList

{

structQNode*front;

structQNode*end;

}QList;

voidInitQL(QList*QL)

{

if(QL==NULL)

QL=(QList*)malloc(sizeof(QList));

QL->front=NULL;

XXXXXXXXXXX数据结构实验报告•实验二CCCCCCCCCCCCCC

QL->end=NULL;

}

voidInsertQL(QList*QL,intvalue)

{

QNode*p;

p=(QNode*)malloc(sizeof(QNode));

p->data=value;

if(QL->front==NULL)

{

QL->front=p;

QL->end=p;

p->next=NULL;

}

else

{

p->next=NULL;

QL->end->next=p;

QL->end=p;

}

}

intDeleteQL(QList*QL)

{

QNode*p;

intres;

if(QL->front==NULL)

{

return-1;

}

res=QL->front->data;

p=QL->front;

if(QL->front->next==NULL)

{

QL->front=NULL;

QL->end=NULL;

}

else

-{

QL->front=p->next;

}

free(p);

CCCCCCCCCCCCCC

xxxxxxxxxxx数据结构实验报告•实验

returnres;

voidPrint(QList*QL)

{

QNode*p;

p=QL->front;

while(p)

{

printf("%d\t",p->data);p=p->next;

}

}intmain()

{

QList*ML;

inti,val;

ML=(QList*)malloc(sizeof(QList));

InitQL(ML);

for(i=0;i<34;i++)

{

InsertQL(ML,i*8+3);

}

Print(ML);

printf("\n");

for(i=1;i<32;i++)

{

val=DeleteQL(ML);printf("%d\t",val);

}

Print(ML);

printf("\n");

return0;

}

四、实验结果

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1