新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你这是数据结构中的队列问题,而不是栈的问题。head代表的是队列头,删除时删的是队列头元素,tail代表的是队列尾,插入时插的是队列尾元素
创新互联公司是一家集网站建设,麟游企业网站建设,麟游品牌网站建设,网站定制,麟游网站建设报价,网络营销,网络优化,麟游网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
程序中这条语句是错误的。中括号只有一半,那一半呢? *p_y=qp++head];
至于要求的主函数,如果是队列问题还要涉及的是一般队列还是循环队列,因此没法写给你。
写了一个链式栈,你看看
# include stdio.h
# include malloc.h
# include stdlib.h
typedef struct Node
{
int data;
struct Node *pNext;
}NODE, *PNODE;
typedef struct Stack
{
PNODE pTop;
PNODE pBottom;//pBottem是指向栈底下一个没有实际意义的元素
}STACK, *PSTACK;
void init( PSTACK );
void push( PSTACK, int );
void traverse( PSTACK );
int pop( PSTACK, int * );
int empty( PSTACK pS );
int main( void )
{
STACK S;//STACK等价于struct Stack
int val;
init( S );//目的是造出一个空栈
push( S, 1 );//压栈
push( S, 2 );
push( S, 3 );
push( S, 4 );
push( S, 5 );
push( S, 6 );
push( S, 7 );
traverse( S );//遍历输出
// clear( S ); //清空数据
// traverse( S );//遍历输出
if( pop( S, val ) )
{
printf( "出栈成功,出栈的元素是%d\n", val );
}
else
{
printf( "出栈失败" );
}
traverse( S );//遍历输出出栈之后的元素
return 0;
}
void init( PSTACK pS )
{
pS-pTop = ( PNODE )malloc( sizeof( NODE ) );
if( NULL == pS-pTop )
{
printf( "动态内存分配失败!\n" );
exit( -1 );
}
else
{
pS-pBottom = pS-pTop;
pS-pTop-pNext = NULL;//或是pS-pBottom = NULL;
}
}
void push( PSTACK pS, int val )
{
PNODE pNew = ( PNODE )malloc( sizeof( NODE ) );
pNew-data = val;
pNew-pNext = pS-pTop;//pS-Top不能改为pS-pBottom
pS-pTop = pNew;
}
void traverse( PSTACK pS )
{
PNODE p = pS-pTop;
while( p != pS-pBottom )
{
printf( "%d ", p-data );
p = p-pNext;
}
printf( "\n" );
}
int empty( PSTACK pS )
{
if( pS-pTop == pS-pBottom )
return 1;
else
return 0;
}
//把pS所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中,如果出栈失败,则返回false,否则true
int pop( PSTACK pS, int *pVal)
{
if( empty( pS ) )//pS本身存放的就是S的地址
{
return 0;
}
else
{
PNODE r = pS-pTop;
*pVal = r-data;
pS-pTop = r-pNext;
free( r );
r = NULL; //为什么要把r赋给NULL呢??
return 1;
}
}
//clear清空
void clear( PSTACK pS )
{
if( empty( pS ) )
{
return ;
}
else
{
PNODE p = pS-pTop;
PNODE q = p-pNext;
while( p != pS-pBottom )
{
q = p-pNext;
free( p );
p = q;
}
pS-pTop = pS-pBottom;
}
}
//Sorry,看来我理解错了,这是改后的》》》》》》》》
//顺序栈
#includestdio.h
#includestdlib.h
#define MAXSIZE 100
typedef struct
{
int data[MAXSIZE];
int top;
}SqStack;
void PushStack(SqStack *S,int x) //入栈
{
if(S-top==MAXSIZE-1) printf("栈已满,不能入栈!\n");
else
}
void PopStack(SqStack *S) //退栈
{
if(S-top==-1) printf("栈为空,不能出栈!\n");
else
}
int GetStackTop(SqStack S) //取栈顶元素
{
return S.data[S.top];
}
main()
{
int x,i;
SqStack myStack;
myStack.top=-1;
do
{
printf("请选择你需要的操作:\n1.置空栈.\n2.进栈.\n3.退栈.\n4.取栈顶元素.\n5.退出程序.\n(请输入1或2或3或4或5):");
scanf("%d",i);
switch(i)
{
case 1:myStack.top=-1;printf("栈已置空!\n");break;
case 2:printf("请输入你要进栈的元素:");
scanf("%d",x);
PushStack(myStack,x);break;
case 3:PopStack(myStack);break;
case 4:if(myStack.top!=-1) printf("栈顶元素是 %d.\n",GetStackTop(myStack));
else printf("栈为空,没有元素!\n");break;
case 5:break;
default:printf("选择错误,请重新输入!\n");break;
}
}while(i!=5);
return 0;
}
//链栈
#includestdio.h
#includestdlib.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;
}
main()
{
int i,x;
do
{
printf("请选择你需要的操作:\n1.置空栈.\n2.进栈.\n3.退栈.\n4.取栈顶元素.\n5.退出程序.\n(请输入1或2或3或4或5):");
scanf("%d",i);
switch(i)
{
case 1:top=NULL;break;
case 2:printf("请输入你要进栈的元素:");
scanf("%d",x);
top=PushStack(top,x);
printf("进栈已完成!\n");break;
case 3:top=PopStack(top);break;
case 4:if(top!=NULL) printf("栈顶元素是:%d!\n",GetStackTop(top));
else printf("栈是空的,没有元素!\n");break;
case 5:break;
default:printf("选择错误,请重新输入!\n");break;
}
}while(i!=5);
return 0;
}