当前位置:
文档之家› 数据结构-堆栈和队列实验报告
数据结构-堆栈和队列实验报告
堆栈链式存储结构下的基本算法;
队列顺序存储结构下的基本算法; 队列链式存储结构下的基本算法;实验内容:
3-18链式堆栈设计。要求
(1) 用链式堆栈设计实现堆栈,堆栈的操作集合要求包括:初始化Stacklnitiate(S),
非空否StackNotEmpty(S),入栈StackiPush(S,x),出栈StackPop(S,d),取栈顶数据元素StackTop(S,d);
return;
}
}
if(StackTop(myStack, &x)==0)
{
printf("error!\n");
return;
}
else
printf("The element of local top is :%d\n",x); printf( "The sequence of outing elements is:\n"); while(StackNotEmpty(myStack))
return0;
}
*d=p->data;
return1;
}
/*撤销*/
void Destroy(LSNode *head)
{
LSNode *p, *p1;
p=head;
while(p!=NULL)
{
p1=p;
p=p->next; free(p1);
}
}(2)主函数程序:
#include<>
#include<>
{
StackPop(myStack, &x);
printf("%d",x);
}
printf("\n");
Destroy(myStack);
printf("This program is made by\n");
}
运行clude<>
#include<>
#include<>
return1;
}
/*出栈操作:*/
int StackPop(LSNode *head, DataType *d)
/*出栈并把栈顶元素由参数d带回*/
{
LSNode *p=head->next;
if(p==NULL)
{
printf("堆栈已空出错!");
return0;
/*删除原栈顶结点*/
/*原栈顶结点元素赋予d*/
(2)编写一个主函数进行测试。
实验结果
3-18
typedef struct snode {
DataType data; struct snode *n ext;
}LSNode;
/*初始化操作:*/
void StackInitiate(LSNode **head)
/*初始化带头结点链式堆栈*/
{
if((*head=(LSNode *)malloc(sizeof(LSNode)))==NULL) exit(1); (*head)->next=NULL;
/*释放原栈顶结点内存空间*/
return1;
}
/*取栈顶数据元素操作:*/
int StackTop(LSNode *head, DataType *d)
/*取栈顶元素并把栈顶元素由参数d带回*/{
LSNode *p=head->next;
if(p==NULL)
{
printf("堆栈已空出错!");
课程
数据结构
实验名称
实验二堆栈和队列
学号
姓名
实验日期:
2012/10/18
实验二堆栈和队列
实验目的:
1.熟悉栈这种特殊线性结构的特性;
2.熟练并掌握栈在顺序存储结构和链表存储结构下的基本运算;
3.熟悉队列这种特殊线性结构的特性;
3.熟练掌握队列在链表存储结构下的基本运算。
实验原理:
堆栈顺序存储结构下的基本算法;
(2) 设计一个主函数对链式堆栈进行测试。测试方法为:依次把数据元素1,2,3,4,5入栈,然后出栈并在屏幕上显示出栈的数据元素;
(3)定义数据元素的数据类型为如下形式的结构体,
Typedef struct
{
char taskName[10];
int taskNo;
}DataType;
首先设计一个包含5个数据元素的测试数据,然后设计一个主函数对链式堆栈进行测试,测
试方法为:依次吧5个数据元素入栈,然后出栈并在屏幕上显示出栈的数据元素。
3-19对顺序循环队列,常规的设计方法是使用対尾指针和对头指针,对尾指针用于指示当
前的対尾位置下标,对头指针用于指示当前的対头位置下标。现要求:
(1)设计一个使用对头指针和计数器的顺序循环队列抽象数据类型,其中操作包括:初始 化,入队列,出队列,取对头元素和判断队列是否为空;
}
/*判非空操作:*/
int StackNotEmpty(LSNode *head)
/*判堆栈是否非空,非空返回1;空返回0*/
{
if(head->next==NULL) return0;
else return1;
}
/*入栈操作:*/
int StackPush(LSNode *head, DataType x)
typedef int DataType;
#include""
void main(void)
{LSNode *myStack;
int i, x;
StackInitiate(&myStack);
for(i=0;i<5; i++)
{if(StackPush(myStack,i+1)==0)
{
printf("error!\n");
exit(0);
typedef struct{
char taskName[10];
int taskNo;
}DataType;
#include""
void main(){
LSNode *myStack;
FILE *fp;
DataType task,x; if((fp=fopen("","r"))==NULL){ printf("不能打开文件!\n");
/*把数据元素x插入链式堆栈head的栈顶作为新的栈顶*/
{
LSNode *p;
if((p=(LSNode *)malloc(sizeof(LSNode)))==NULL)
{
printf("内存空间不足无法插入!\n");
return0;
}
p->data=x;
p->next=head->next;/*新结点链入栈顶*/head->next=p;/*新结点成为新的栈顶*/