
数据结构实验(用c语言写) 栈的基本操作
(1)编写栈的基本操作函数(分别用顺序和链接两种方式实现)。#defineSTACK_INIT_SIZE100//栈内存的初始分配量,以sizeof(ElemType)为...
(1)编写栈的基本操作函数(分别用顺序和链接两种方式实现)。
#define STACK_INIT_SIZE 100 //栈内存的初始分配量,以sizeof(ElemType)为单位
#define STACKINCREMENT 10 //栈内存的分配增量,以sizeof(ElemType)为单位
typedef struct {
SElemType *base; //存储空间的基址,数据元素的数据类型约定为SElemType
SElemType * top; //表示栈顶,如果top==base,表示空栈
int stacksize; //当前分配的存储容量,以sizeof(ElemType) 为单位
} SqStack
①进栈函数 Status Push(SqStack *S, SElemType e)
②出栈函数 Status Pop(SqStack *S,SElemType *e)
③输出栈元素 OutputStack(SqStack *S)
(2)调用上述函数实现下列操作,操作步骤如下。
①调用进栈函数建立一个栈。
②读取栈顶元素。
③从栈中删除元素。
④输出栈中的所有元素。
注意 每完成一个步骤就必须及时输出栈中元素,以便观察操作结果
请发邮箱nashforever3@163.com ,非常感谢!
能在vc++6.0运行。 展开
#define STACK_INIT_SIZE 100 //栈内存的初始分配量,以sizeof(ElemType)为单位
#define STACKINCREMENT 10 //栈内存的分配增量,以sizeof(ElemType)为单位
typedef struct {
SElemType *base; //存储空间的基址,数据元素的数据类型约定为SElemType
SElemType * top; //表示栈顶,如果top==base,表示空栈
int stacksize; //当前分配的存储容量,以sizeof(ElemType) 为单位
} SqStack
①进栈函数 Status Push(SqStack *S, SElemType e)
②出栈函数 Status Pop(SqStack *S,SElemType *e)
③输出栈元素 OutputStack(SqStack *S)
(2)调用上述函数实现下列操作,操作步骤如下。
①调用进栈函数建立一个栈。
②读取栈顶元素。
③从栈中删除元素。
④输出栈中的所有元素。
注意 每完成一个步骤就必须及时输出栈中元素,以便观察操作结果
请发邮箱nashforever3@163.com ,非常感谢!
能在vc++6.0运行。 展开
3个回答
展开全部
//顺序栈
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
typedef int ElemType;
int InitStack(SqStack &S) //为栈S分配存储空间,并置S为空栈
{
int size = STACK_INIT_SIZE;
S.base=(int *)malloc(size*sizeof(ElemType));
if(!S.base)
return 0;
S.top=S.base; //置栈S为空栈
S.stacksize=STACK_INIT_SIZE;
return 1;
}
int GetTop(SqStack S,int &e) //若栈不空,则用e返回S的栈顶元素
{
if(S.top==S.base) return 0;
e=*(S.top-1);
return 1;
}
int Push(SqStack &S, int e) /*进栈函数,将e插入栈S中,并使之成为栈顶元素*/
{ if(S.top-S.base>=S.stacksize) /*栈满,追加存储空间*/
{
int stackinvrement = STACKINCREMENT;
S.base=(ElemType *) realloc(S.base,(S.stacksize+stackinvrement)*sizeof(ElemType));
if(!S.base)
return 0; /*存储分配失败*/
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 1;
}
int Pop(SqStack &S,int &e)/*出栈函数,若栈S不空,则删除S的栈顶元素,用e返回其值*/
{ if(S.top==S.base) return 0;
e=*--S.top;
return 1;
}
void OutputStack(SqStack &S)
{int *q;
q=S.top-1;
for(int i=0;i<S.top-S.base;i++)
{
printf("%3d ",*q);q--;}
}
void main()
{
int a,b,c ;
char m;
SqStack s;
InitStack(s);
printf("请输入要进栈的元素个数是:");
scanf("%d",&a);
printf("\n请输入要进栈的%d个元素:",a);
for(b=0;b<a;b++) {
scanf("%d",&c);
Push(s,c); }
do { printf("\n");
printf("*********** 1.输出栈的元素**********\n");
printf("*********** 2.取栈顶元素************\n");
printf("*********** 3.删除栈顶元素**********\n");
printf("*********** 4.退出程序**********\n");
printf("\n请选择一个字符:");
getchar();
scanf("%c",&m);
switch(m) {
case '1': printf("\n输出的栈为:");
OutputStack(s);
break;
case '2': GetTop(s,c);
printf("\n栈顶元素为:%d",c);
printf("\n输出的栈为:");
OutputStack(s);
break;
case '3': Pop(s,c);
printf("\n删除的栈顶元素:%d",c);
printf("\n输出的栈为:");
OutputStack(s);
printf("\n");
break;
case '4':break;
default: printf("输入的数字有错,请重新选择!\n"); break;
}
}while(m!='4');
}
//链栈
#include<stdio.h>
#include<stdlib.h>
typedef struct SNode
{
int data;
struct SNode *next;
}SNode,*LinkStack;
LinkStack top;
LinkStack PushStack(LinkStack top,int x) //入栈
{
LinkStack s;
s=(LinkStack)malloc(sizeof(SNode));
s->data=x;
s->next=top;
top=s;
return top;
}
LinkStack PopStack(LinkStack top) //退栈
{
LinkStack p;
if(top!=NULL)
{
p=top;
top=top->next;
free(p);
printf("退栈已完成\n");
return top;
}
else printf("栈是空的,无法退栈!\n"); return 0;
}
int GetStackTop(LinkStack top) //取栈顶元素
{
return top->data;
}
bool IsEmpty()//bool取值false和true,是0和1的区别,bool只有一个字节,BOOL为int型,bool为布尔型
{
return top==NULL ? true:false;
}
void Print()
{
SNode *p;
p=top;
if(IsEmpty())
{
printf("The stack is empty!\n");
return;
}
while(p)
{
printf("%d ", p->data);
p=p->next;
}
printf("\n");
}
void main()
{
int x,a,b;
char m;
do { printf("\n");
printf("###############链栈的基本操作##################\n");
printf("××××××××1.置空栈××××××××××\n");
printf("××××××××2.进栈×××××××××××\n");
printf("××××××××3.退栈×××××××××××\n");
printf("××××××××4.取栈顶元素××××××××\n");
printf("××××××××5.退出程序×××××××××\n");
printf("##############################################\n");
printf("\n请选择一个字符:");
scanf("%c",&m);
switch(m){
case '1':
top=NULL;
printf("\n栈已置空!");
break;
case '2':
printf("\n请输入要进栈的元素个数是:");
scanf("%d",&a);
printf("\n请输入要进栈的%d个元素:",a);
for(b=0;b<a;b++) {
scanf("%d",&x);
top=PushStack(top,x); }
printf("进栈已完成!\n");
printf("\n输出栈为:");
Print();
break;
case '3':
printf("\n操作之前的输出栈为:");
Print();
top=PopStack(top);
printf("\n操作过后的输出栈为:");
Print();
break;
case '4':
printf("\n输出栈为:");
Print();
if(top!=NULL)
printf("\n栈顶元素是:%d\n",GetStackTop(top));
else
printf("\n栈是空的,没有元素!");
break;
case '5':break;
default:
printf("\n输入的字符不对,请重新输入!");
break;
}
getchar();
}while(m!='5');
}
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
typedef int ElemType;
int InitStack(SqStack &S) //为栈S分配存储空间,并置S为空栈
{
int size = STACK_INIT_SIZE;
S.base=(int *)malloc(size*sizeof(ElemType));
if(!S.base)
return 0;
S.top=S.base; //置栈S为空栈
S.stacksize=STACK_INIT_SIZE;
return 1;
}
int GetTop(SqStack S,int &e) //若栈不空,则用e返回S的栈顶元素
{
if(S.top==S.base) return 0;
e=*(S.top-1);
return 1;
}
int Push(SqStack &S, int e) /*进栈函数,将e插入栈S中,并使之成为栈顶元素*/
{ if(S.top-S.base>=S.stacksize) /*栈满,追加存储空间*/
{
int stackinvrement = STACKINCREMENT;
S.base=(ElemType *) realloc(S.base,(S.stacksize+stackinvrement)*sizeof(ElemType));
if(!S.base)
return 0; /*存储分配失败*/
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 1;
}
int Pop(SqStack &S,int &e)/*出栈函数,若栈S不空,则删除S的栈顶元素,用e返回其值*/
{ if(S.top==S.base) return 0;
e=*--S.top;
return 1;
}
void OutputStack(SqStack &S)
{int *q;
q=S.top-1;
for(int i=0;i<S.top-S.base;i++)
{
printf("%3d ",*q);q--;}
}
void main()
{
int a,b,c ;
char m;
SqStack s;
InitStack(s);
printf("请输入要进栈的元素个数是:");
scanf("%d",&a);
printf("\n请输入要进栈的%d个元素:",a);
for(b=0;b<a;b++) {
scanf("%d",&c);
Push(s,c); }
do { printf("\n");
printf("*********** 1.输出栈的元素**********\n");
printf("*********** 2.取栈顶元素************\n");
printf("*********** 3.删除栈顶元素**********\n");
printf("*********** 4.退出程序**********\n");
printf("\n请选择一个字符:");
getchar();
scanf("%c",&m);
switch(m) {
case '1': printf("\n输出的栈为:");
OutputStack(s);
break;
case '2': GetTop(s,c);
printf("\n栈顶元素为:%d",c);
printf("\n输出的栈为:");
OutputStack(s);
break;
case '3': Pop(s,c);
printf("\n删除的栈顶元素:%d",c);
printf("\n输出的栈为:");
OutputStack(s);
printf("\n");
break;
case '4':break;
default: printf("输入的数字有错,请重新选择!\n"); break;
}
}while(m!='4');
}
//链栈
#include<stdio.h>
#include<stdlib.h>
typedef struct SNode
{
int data;
struct SNode *next;
}SNode,*LinkStack;
LinkStack top;
LinkStack PushStack(LinkStack top,int x) //入栈
{
LinkStack s;
s=(LinkStack)malloc(sizeof(SNode));
s->data=x;
s->next=top;
top=s;
return top;
}
LinkStack PopStack(LinkStack top) //退栈
{
LinkStack p;
if(top!=NULL)
{
p=top;
top=top->next;
free(p);
printf("退栈已完成\n");
return top;
}
else printf("栈是空的,无法退栈!\n"); return 0;
}
int GetStackTop(LinkStack top) //取栈顶元素
{
return top->data;
}
bool IsEmpty()//bool取值false和true,是0和1的区别,bool只有一个字节,BOOL为int型,bool为布尔型
{
return top==NULL ? true:false;
}
void Print()
{
SNode *p;
p=top;
if(IsEmpty())
{
printf("The stack is empty!\n");
return;
}
while(p)
{
printf("%d ", p->data);
p=p->next;
}
printf("\n");
}
void main()
{
int x,a,b;
char m;
do { printf("\n");
printf("###############链栈的基本操作##################\n");
printf("××××××××1.置空栈××××××××××\n");
printf("××××××××2.进栈×××××××××××\n");
printf("××××××××3.退栈×××××××××××\n");
printf("××××××××4.取栈顶元素××××××××\n");
printf("××××××××5.退出程序×××××××××\n");
printf("##############################################\n");
printf("\n请选择一个字符:");
scanf("%c",&m);
switch(m){
case '1':
top=NULL;
printf("\n栈已置空!");
break;
case '2':
printf("\n请输入要进栈的元素个数是:");
scanf("%d",&a);
printf("\n请输入要进栈的%d个元素:",a);
for(b=0;b<a;b++) {
scanf("%d",&x);
top=PushStack(top,x); }
printf("进栈已完成!\n");
printf("\n输出栈为:");
Print();
break;
case '3':
printf("\n操作之前的输出栈为:");
Print();
top=PopStack(top);
printf("\n操作过后的输出栈为:");
Print();
break;
case '4':
printf("\n输出栈为:");
Print();
if(top!=NULL)
printf("\n栈顶元素是:%d\n",GetStackTop(top));
else
printf("\n栈是空的,没有元素!");
break;
case '5':break;
default:
printf("\n输入的字符不对,请重新输入!");
break;
}
getchar();
}while(m!='5');
}
展开全部
// 初始化数据库
BOOL CDataBase::FaxIniDataLink(CString BaseName,CString Name,CString Code)
{
if(m_FaxDataLink!=NULL&&m_FaxDataLink->State)
m_FaxDataLink->Close();
if(m_FaxDataLink!=NULL&&m_FaxDataLink->State)
{
if(m_FaxDataBaseName != BaseName)
{
m_FaxDataLink -> Close();
m_FaxDataLink = 0;
}
}
if(m_FaxDataLink!=NULL&&m_FaxDataLink->State)
return 1;
CString SQL="DSN="+BaseName+";UID="+Name+";PWD="+Code;
// CString SQL="Driver={SQL Server};Server=150.0.1.131;Uid Id=;Pwd=;Database=餐饮管理";
// _bstr_t source("Driver={SQL Server};Server=150.0.1.131;Uid Id=;Pwd=;Database=Northwind");
// 数据库连接字符串(数据库名称,登陆名称,登陆密码)维修服务管理系统数据库
_bstr_t conn = SQL;
_bstr_t name;
_bstr_t code;
HRESULT hr = 0;
try
{
// 创建连接智能指针"ADODB.Connection"
hr = m_FaxDataLink.CreateInstance(__uuidof(Connection));
if (SUCCEEDED(hr))// 连接数据库
m_FaxDataLink -> Open(conn, "", "", -1);
if(SUCCEEDED(hr))// 置数据库打开标志
{
// 设置连接超时
m_FaxDataLink->PutCommandTimeout(5);
m_FaxDataBaseName = BaseName;
m_FaxLinkName=Name;
m_FaxLinkCode=Code;
m_FaxLinkSQL = SQL;
}
else
{
AfxMessageBox("ADO数据源初始化失败!");
m_FaxLinkSQL = "";
}
}
catch (_com_error & error)
{
// 出错处理
AfxMessageBox(error.ErrorMessage());
m_FaxDataLink=NULL;
m_FaxLinkSQL.Empty();
return 0;
}
return 1;
}
BOOL CDataBase::FaxIniDataLink(CString BaseName,CString Name,CString Code)
{
if(m_FaxDataLink!=NULL&&m_FaxDataLink->State)
m_FaxDataLink->Close();
if(m_FaxDataLink!=NULL&&m_FaxDataLink->State)
{
if(m_FaxDataBaseName != BaseName)
{
m_FaxDataLink -> Close();
m_FaxDataLink = 0;
}
}
if(m_FaxDataLink!=NULL&&m_FaxDataLink->State)
return 1;
CString SQL="DSN="+BaseName+";UID="+Name+";PWD="+Code;
// CString SQL="Driver={SQL Server};Server=150.0.1.131;Uid Id=;Pwd=;Database=餐饮管理";
// _bstr_t source("Driver={SQL Server};Server=150.0.1.131;Uid Id=;Pwd=;Database=Northwind");
// 数据库连接字符串(数据库名称,登陆名称,登陆密码)维修服务管理系统数据库
_bstr_t conn = SQL;
_bstr_t name;
_bstr_t code;
HRESULT hr = 0;
try
{
// 创建连接智能指针"ADODB.Connection"
hr = m_FaxDataLink.CreateInstance(__uuidof(Connection));
if (SUCCEEDED(hr))// 连接数据库
m_FaxDataLink -> Open(conn, "", "", -1);
if(SUCCEEDED(hr))// 置数据库打开标志
{
// 设置连接超时
m_FaxDataLink->PutCommandTimeout(5);
m_FaxDataBaseName = BaseName;
m_FaxLinkName=Name;
m_FaxLinkCode=Code;
m_FaxLinkSQL = SQL;
}
else
{
AfxMessageBox("ADO数据源初始化失败!");
m_FaxLinkSQL = "";
}
}
catch (_com_error & error)
{
// 出错处理
AfxMessageBox(error.ErrorMessage());
m_FaxDataLink=NULL;
m_FaxLinkSQL.Empty();
return 0;
}
return 1;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好吧,我发给你,你自己看看
追问
你给的和我的题目不太对应啊。是要用 c写的,不是c++写的啊,有c写的吗?
追答
你在哪个基础上做一下小改动不就好了么。。很简单的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询