- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用栈将线性表逆实验
数据结构课程设计题
实验2 栈
实验的目的要求
了解栈的特性,以及它在实际问题中的应用。
掌握栈的实现方法以及它的基本操作,学会运用栈来解决问题。
实验的主要内容
1、已知head是带头结点的单链表(a1,a2,…,an)(其中n=0),int datatype;
#include stdio.h
#define NULL 0
typedef struct node
{datatype data;
struct node *next;
}linklist;
linklist *head;
请设计一个算法,利用一个栈将上述单链表实现逆置,即利用一个栈将单链表(a1,a2,…,an)(其中n=0)an,an-1,…,a1)。
调试运行实例:
⑴ 含多个结点的顺序表(2,4,6,8,10);
⑵ 含一个结点的顺序表(5);
⑶ 空表()。
栈的特性
1、栈(Stack)(top),表头称为栈底(bottom)。栈的特点是后进先出(Last In First Out)。
出栈 入栈
栈顶 an
┇
a3
a2
栈底 a1
图2.1 栈的示意图
2、栈的基本操作
和线性表类似,栈也有两种存储结构,即顺序栈和链栈。
⑴顺序栈可以定义为
#define maxsize 100 /*栈的最大元素数为100*/
typedef struct /*定义顺序栈*/
{datatype d[maxsize];
int top;
}seqstack;
seqstack *s; /*定义顺序栈的指针*/
顺序栈的基本操作如下:
①栈的初始化(建立一个空栈)
void InitStack(seqstack *s) /*构造一个空栈s*/
{s-top=-1;
}
②入栈操作
seqstack *push(seqstack *s,datatype x) /*入栈*/
{if(s-top==maxsize -1)
{ printf(“栈已满,不能入栈!\n”);
return NULL;
}
else { s-top++; /*栈顶指针上移*/
s-d[s-top]=x; /*将x存入栈中*/
return s;
}
}
③出栈函数
datatype pop(seqstack *s) /*出栈*/
{ datatype y;
if(s-top==-1)
{ printf(“栈为空,无法出栈!\n”);
return 0;
}
else { y=s-d[s-top]; /*栈顶元素出栈,存入y中*/
s-top--; /*栈顶指针下移*/
return y;
}
}
④判栈空函数
int StackEmpty(seqstack *s)
{if(s-top==-1) return 1; /*栈为空时返回1(真)*/
else return 0; /*栈非空时返回0(假)*/
}
⑵链栈可以定义为
#define NULL 0
typedef struct node /*定义链栈结点类型*/
{datatype data;
struct node *next;
}linkstack;
linkstack *top; /*定义栈顶指针*/
链栈的基本操作如下:
①栈的初始化(建立一个空栈)
void init_linkstack(linkstack *top)
{top=NULL;
}
②入栈操作
linkstack *push_linkstack(linkstack *top, datatype x)
{linkstack *p;
p=(linkstack *)malloc(sizeof(linkstack));/*开辟新结点*/
p-data=x;
p-next=top;
top=p;
return top;
}
③出栈函数
datatype pop_linkstack(linkstack *top) /*出栈*/
{ datatype y;
linkstack *p;
if(top==N
文档评论(0)