数据结构实验三(顺序栈的基本操作)
- 格式:doc
- 大小:34.50 KB
- 文档页数:5


实验一 顺序表的基本操作
一、实验目的
掌握线性表的顺序表基本操作:建立、插入、删除、查找、合并、打印等运算。
二、实验要求包含有头文件和main函数;
1. 格式正确,语句采用缩进格式;
2. 设计子函数实现题目要求的功能;
3. 编译、连接通过,熟练使用命令键;
4. 运行结果正确,输入输出有提示,格式美观。
三、实验设备、材料和工具
1. 奔腾2计算机或以上机型
2. turboc2,win-tc
四、实验内容和步骤
1. 建立一个含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。
2. 往该顺序表中第i位置插入一个值为x的数据元素。
3. 从该顺序表中第j位置删除一个数据元素,由y返回。
4. 从该顺序表中查找一个值为e的数据元素,若找到则返回该数据元素的位置,否则返回“没有找到”。
五、 程序
#include
#include
#define list_init_size 10
#define increment 2
typedef struct {
int *elem;
int length,listsize;
}sqlist; //类型定义
void initlist_sq(sqlist &L) //初始化顺序表
{ }
void output(sqlist L) //输出顺序表
{ }
void insertlist(sqlist &L,int i, int x) //顺序表中插入x
{ }
void deletelist(sqlist &L,int j, int y) //顺序表中删除y
{ }
int locateelem(sqlist &L,int e) //顺序表中查找e
{ }
void main()
{ }
【运行结果】
void initlist_sq(sqlist &L) //初始化顺序表
数据结构实验
实验内容和目的:
掌握几种基本的数据结构:集合、线性结构、树形结构等在求解实际问题中的应用,以及培养书写规范文档的技巧。学习基本的查找和排序技术。让我们在实际上机中具有编制相当规模的程序的能力。养成一种良好的程序设计风格。
实验教材:
数据结构题集(C语言版) 清华大学出版社 2007年
实验项目:
实验一、栈和循环队列
㈠、实验内容:
① 栈
掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。本程序采用的是链栈结构,具有初始化一个栈、PUSH、POP、显示所有栈里的元素四个功能。
② 循环队列
掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,学会循环队列的实现,以便在实际问题背景下灵活运用。本程序具有初始化一个队列、入队、出队、显示队列的所有元素、队列长度五个功能。
㈡、实验代码
① 栈
程序代码:
#include
#include
#define Stack_Size 6
#define ERROR 0
#define OK 1
typedef int SElemType;
typedef struct SNode
{
SElemType data;
struct SNode *next; }SNode,*LinkStack;
int CreatTwo(LinkStack &head,int n)
{
int i;
SNode *p;
head=(LinkStack)malloc(sizeof(SNode));
head->next=NULL;
printf("请输入数据(数字):\n");
for(i=n;i>0;--i)
{
p=(SNode *)malloc(sizeof(SNode));
scanf("%d",&p->data);
p->next=head->next;
栈和队列的基本操
作是线性表操作的子集,是限定性(操作受限制)的数据结构。第三章栈和队列
数
据
结
构
之
栈
和
队
列
23. 1 栈
¾定义:是限定仅在表尾进行插入或删除操作
的线性表。(后进先出线性表LIFO)
¾栈底指针(base) :是线性表的基址;
¾栈顶指针(top):指向线性表最后一个元素的后面。
¾当top=base 时,为空栈。
¾基本操作:
InitStack(&S), DestroyStack(&S),
StackEmpty(S) , ClearStack(&S),
GetTop(S ,&e), StackLength(S) ,
Push(&S, e): 完成在表尾插入一个元素e.
Pop(&S,&e): 完成在表尾删除一个元素。
数
据结构之栈
和
队
列
3¾栈的表示和实现
¾顺序栈:是利用一组地址连续的存储单元
依次存放自栈底到栈顶的数据元素;栈满
之后,可再追加栈空间即为动态栈。
¾顺序栈的结构类型定义:
typedef int SElemType;
typedef struct{
SElemType *base; /* 栈底指针*/
SElemType *top; /* 栈顶指针*/
int stacksize; /* 栈空间大小*/
}SqStack;
数
据
结
构
之
栈
和
队
列
4¾基本算法描述
¾建立能存放50个栈元素的空栈
#define STACK_INIT_SIZE 50
#define STACKINCREMENT 10
Status InitStack_Sq(Stack &S){
S.base=(SET*)malloc(STACK_INIT_SIZE
*sizeof(SET)); /*为栈分配空间*/
if(S.base==NULL)
exit(OVERFLOW); /*存储分配失败*/
S.top=S.base;
S.stacksize = STACK_INIT_SIZE;
return OK; }
数
据结构之栈
和
队
列
5¾出栈操作算法
void pop(Sqstacks,SElemTypee)
实验一 单链表的基本操作(必做)
一、实验目的
1.掌握单链表的存储、初始化、插入、删除等操作的程序实现。
2.加深对单链表基本概念,基本理论及相应算法的掌握与理解。
3.了解链表的处理方式,学习体会简单的单链表程序实现相关知识。
二、实验内容
1.建立一个链表、设计链表的基本操作实现算法、输出一个链表表,调试并输出结果。
2.编写一个程序实现如下功能:让计算机产生出50个0~9之间的随机数并依次保存到单链表中;输出遍历单链表;从单链表中删除与给定值相等的所有结点;输出遍历单链表;输出单链表长度,调试并输出结果。
三、实验步骤
1.定义一个链表结构体。。
2.利用插入功能插入一个结点。
3.利用删除功能删除一个结点。
四、程序运行测试
1.利用插入功能插入一个结点。
2.利用删除功能删除一个结点。
五、实验报告要求
1.绘制链表操作实现的流程图。
2.详细给出程序运行测试结果(包括测试数据和测试结果)。
3.选试验步骤2-3中的任意一个,给出程序的详细注释。 4.参考程序中某一部分功能的改进(选做)
5.实验心得与体会
6.附录,实验用源程序
六、参考源代码
#include
#include
typedef struct LNode
{int data;
struct LNode *next;
}Lnode, *LinkList;
//假设下面的单链表均为带头结点。
void CreatLinkList(LinkList &L,int j)
{//建立一个单链表L,数据为整数,数据由键盘随机输入。
LinkList p,q;
L=(LinkList )malloc(sizeof(Lnode));
L->next=NULL;
q=L;
cout<<"在单链表内输入整数:"<
for(int i=0;i
cin>>p->data;
p->next=q->next;