void main()
{
	ElemType e;
	SqStack *s;
	printf("Õ»sµÄ»ù±¾ÔËËãÈçÏÂ:\n");
	printf("  (1)³õʼ»¯Õ»s\n");
	InitStack(s);
	printf("  (2)ջΪ%s\n",(StackEmpty(s)?"¿Õ":"·Ç¿Õ"));
	printf("  (3)ÒÀ´Î½øÕ»ÔªËØa,b,c,d,e\n");
	Push(s,'a');
	Push(s,'b');
	Push(s,'c');
	Push(s,'d');
	Push(s,'e');
	printf("  (4)ջΪ%s\n",(StackEmpty(s)?"¿Õ":"·Ç¿Õ"));
	printf("  (5)Õ»µÄ³¤¶È=%d\n",StackLength(s));  
	printf("  (6)Êä³ö´ÓÕ»¶¥µ½Õ»µ×ÔªËØ:");
	DispStack(s);  
	printf("  (7)³öÕ»ÐòÁУº");
	while (!StackEmpty(s))
	{
		Pop(s,e);
		printf("%c",e);
	}
	printf("\n");
	printf("  (8)ջΪ%s\n",(StackEmpty(s)?"¿Õ":"·Ç¿Õ"));
	printf("  (9)ÊÍ·ÅÕ»\n");
	DestroyStack(s);
}
int main(int argc, char *argv[])
{
  psqStack my_stack = (psqStack)malloc(sizeof(sqStack));
  initStack(&my_stack);

  char bin;          // 用于接收用户的输入的01,作为字符串处理
  int  decimal = 0;  // 用户接收最后生成的10进制数字
  while ((bin = getchar())!='\n') {      // 当有回车的时候跳出循环.
    if (bin == '1' || bin == '0') {
      Push(my_stack, (int)atof(&bin));     // 注意这里atof返回的是double, 所以要强制类型转换
    }
    else
      {
        printf("You must enter 1 or 0\n");
        return ERROR;
      }
  }

  Show(my_stack);

  int popped_e;
  int len = StackLength( my_stack );
  for (int i = 0; i < len; i++) {
    Pop(my_stack, &popped_e);
    decimal += popped_e * (int)pow(2, i);
  }

  printf(" decimal = %d\n", decimal);

  return 0;
}
Exemple #3
0
int main()
{
    SqStack S;
    printf("(1)��ʼ��ջ��\n");
    InitStack (S);
    printf("(2)�ж�ջs�Ƿ�ǿգ�");
    if(StackEmpty(S))
        printf("�ǿ�\n");
    else printf("��\n");
    printf("(3)���ν�ջԪ��a,b,c,d,e:\n");
    push(S,'a');
    push(S,'b');
    push(S,'c');
    push(S,'d');
    push(S,'e');
    printf("(4)�ж�ջs�Ƿ�ǿգ�");
    if(StackEmpty(S))
        printf("�ǿ�\n");
    else printf("��\n");

    printf("(5)ջ�ij����ǣ�%d\n",StackLength(S));
    printf("(6)�����ջ����ջ��Ԫ��:");
    StackTraverse(S);
    printf("\n(7)�����ջ����:");
    StackGet(S);

    printf("\n(8)�ж�ջs�Ƿ�ǿգ�");
    if(StackEmpty(S))
        printf("�ǿ�\n");
    else printf("��\n");

    printf("(9)�ͷ�ջ");
    DestroyStack(S);

}
Exemple #4
0
int main()
{
    int j;
    SqStack s;
    int e;
    if(InitStack(&s)==OK)
    {
    	for(j=1; j<=10; j++)
        	Push(&s,j);		
	}
                
    printf("Õ»ÖÐÔªËØÒÀ´ÎΪ£º");
    StackTraverse(s);
    
    Pop(&s,&e);
    printf("µ¯³öµÄÕ»¶¥ÔªËØe=%d\n",e);
    
    printf("Õ»¿Õ·ñ£º%d(1:¿Õ0:·ñ)\n",StackEmpty(s));
    
    GetTop(s,&e);
    printf("Õ»¶¥ÔªËØe=%dÕ»µÄ³¤¶ÈΪ%d\n",e,StackLength(s));
    
    ClearStack(&s);
    printf("Çå¿ÕÕ»ºó£¬Õ»¿Õ·ñ£º%d(1:¿Õ0:·ñ)\n",StackEmpty(s));
    
    return 0;
}
/*Bianry Search Tree 前序遍历非递归实现*/
void InOrderSecond(BinaryTree btree) {
	Stack bStack;
	//BinaryTree p =NULL;
	StackInitial(bStack);//初始化栈
	while (btree || StackLength(bStack)!=0) {
		while (btree != NULL) {
			Push(bStack, btree);
			btree = btree->lchild;
		}
		if (StackLength(bStack) != 0) {
			Pop(bStack, btree);
			printf("%d ", btree->key);
			btree = btree->rchild;
		}

	}
	printf("\n");
}
 void main()
 {
   int j;
   LinkStack s;
   SElemType e;
   if(InitStack(&s))
     for(j=1;j<=5;j++)
       Push(s,2*j);
   printf("栈中的元素从栈底到栈顶依次为: ");
   StackTraverse(s,print);
   Pop(s,&e);
   printf("弹出的栈顶元素为%d\n",e);
   printf("栈空否: %d(1:空 0:否)\n",StackEmpty(s));
   GetTop(s,&e);
   printf("当前栈顶元素为%d,栈的长度为%d\n",e,StackLength(s));
   ClearStack(s);
   printf("清空栈后,栈空否: %d(1:空 0:否),栈的长度为%d\n",StackEmpty(s),StackLength(s));
   printf("是否销毁栈了: %d(1:是 0:否)\n",DestroyStack(&s));
 }
void PrintStack(SqStack S) {
	int len = StackLength(S);
	printf("the stack's length is: %d\n", len);
	printf("the stack's capacity is: %d\n", S.stackSize);
	if (len <= 0) return;
	for (int i = 0; i < len; i++) {
		ElemType e = *(S.top - i - 1);
		printf("%d\t", e.key);
	}
	printf("\n");
}
Exemple #8
0
/**
 * 插入元素e为新的栈顶元素
 */
Status Push(SqStack &S, SElemType e)
{
	if (S.stacksize == StackLength(S)) {   //栈达到了最大容量,自动增加容量
		S.base = (SElemType *) realloc (S.base, (S.stacksize + STACKINCREMENT)*sizeof(SElemType));
		if (!S.base)
			return ERROR;
		S.stacksize += STACKINCREMENT;
	}
	*S.top = e;
	S.top++;
	return OK;
}
Exemple #9
0
int main()
{
	Stack s;
	ElemType x;
	cout<<"(1)³õʼ»¯Õ»s"<<endl;
	InitStack(s);
	cout<<"(2)ջΪ"<<(StackEmpty(s)?"¿Õ":"·Ç¿Õ")<<endl;
	cout<<"(3)ÒÀ´ÎÊäÈë×ÖĸÐòÁУ¬ÒÔ¡°#¡±½áÊø£º"<<endl;
	cin>>x;
	while( x!='#')
	{
		Push(s,x);
		cin>>x;
	}
	cout<<"(4)ջΪ"<<(StackEmpty(s)?"¿Õ":"·Ç¿Õ")<<endl;
	cout<<"(5)Õ»³¤¶ÈStackLength(s):"<<StackLength(s)<<endl;
	cout<<"(6a)Õ»¶¥ÔªËØGetTop(s)Ϊ£º";
	cout<<GetTop(s)<<endl;
	cout<<"(6b)Õ»¶¥ÔªËØGetTop1(s,x)Ϊ£º"<<endl;
	GetTop1(s,x);
	cout<<x<<endl;
	cout<<"(7)´ÓÕ»¶¥µ½Õ»µ×ÔªËØPrintStack(s)Ϊ£º"<<endl;
	PrintStack(s);
	cout<<"(8)³öÕ»Pop1(s,x)µÄÔªËØΪ£º"<<endl;
	Pop1(s,x);
	cout<<x<<endl;
	cout<<"(9)³öÕ»ÐòÁÐ:"<<endl;
	while(!StackEmpty(s))
    {
        cout<<Pop(s)<<" ";
    }
    cout<<endl;
    cout<<"(10)ջΪ:"<<(StackEmpty(s)?"¿Õ":"·Ç¿Õ")<<endl;
    cout<<"(11)ÒÀ´Î½øÕ»ÔªËØa,b,c:"<<endl;
    Push(s,'a');
    Push(s,'b');
    Push(s,'c');
    cout<<"(12)´ÓÕ»¶¥µ½Õ»µ×ÔªËØPrintStack(s)Ϊ£º"<<endl;
    PrintStack(s);
    cout<<"(13)Çå¿ÕÕ»ClearStack(s)"<<endl;
    ClearStack(s);
    cout<<"(14)ջΪ"<<(StackEmpty(s)?"¿Õ":"·Ç¿Õ")<<endl;
    cout<<"(15)Ïú»ÙÕ»s:"<<endl;
    DestoryStack(s);
    cout<<"(16)Ïú»ÙÕ»ºóµ÷ÓÃPush(s,e)ºÍPrintStack(s)"<<endl;
    Push(s,'e');
    PrintStack(s);
	return 0;
}
Exemple #10
0
int main(int argc, const char *argv[])
{
	LinkStack *testList = NULL;
	elemType e;
	int i;
	srand(time(0));
	printf("list length is %d\n",StackLength(testList));
	if(InitStack(&testList) == ERROR){
		return -1;
	}
	for(i = 0; i < 10 ; i++){
		Push(testList,i);
	}
	printf("list length is %d\n",StackLength(testList));
	PrintStack(testList);
	Pop(testList,&e);
	printf("pop e is %d ,length is %d \n",e,StackLength(testList));
	ClearStack(&testList);
	printf("list length is %d\n",StackLength(testList));

	printf("scanner: is it matching? ");
	scanner("hello(){}") ? printf("true \n"):printf("false \n");
	return 0;
}
Exemple #11
0
//********************
void main_SeqStack(){
	SeqStack S;
	int i;
	DataType a[]={'a','b','c','d','e'};
	DataType e;
	InitStack(&S);
	for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
	{
		if(PushStack(&S,a[i])==0)
		{
			printf("栈已满,不能进栈!");
			return;
		}
	}
	printf("出栈的元素是:");
	if(PopStack(&S,&e)==1)
		printf("%4c",e);
	if(PopStack(&S,&e)==1)
		printf("%4c",e);  
	printf("\n");
	printf("当前栈顶的元素是:");  
	if(GetTop(S,&e)==0)
	{
		printf("栈已空!");
		return;
	}
	else
		printf("%4c\n",e);
	if(PushStack(&S,'f')==0)
	{
		printf("栈已满,不能进栈!");
		return;
	}
	if(PushStack(&S,'g')==0)
	{
		printf("栈已满,不能进栈!");
		return;
	}
	printf("当前栈中的元素个数是:%d\n",StackLength(S));
	printf("元素出栈的序列是:");
	while(!StackEmpty(S))
	{
		PopStack(&S,&e);
		printf("%4c",e);
	}
	printf("\n");
	system("pause");
}
/**
 * @brief delete element from the queue.
 *
 * @param[in,out]  Q     queue struct pointer
 * @param[out]     e     the element to be deleted
 *
 * @return return OK and set e if success, else return ERROR
 */
Status DeQueue(Queue* Q, ElementType* e)
{
    assert(Q != NULL && e != NULL);
    if (!StackEmpty(&Q->s2)) {
        Pop(&Q->s2, e);
        return OK;
    } else if (!StackEmpty(&Q->s1)) {
        CommonType keep_one = StackLength(&Q->s1) - 1;
        while (keep_one--) {
            Pop(&Q->s1, e);
            Push(&Q->s2, *e);
        }
        Pop(&Q->s1, e);
        return OK;
    } else {
        return ERROR;
    }
}
int main()
{
        int j;
        LinkStack s;
        int e;
        if(InitStack(&s)==OK)
                for(j=1;j<=10;j++)
                        Push(&s,j);
        printf("栈中元素依次为:");
        StackTraverse(s);
        Pop(&s,&e);
        printf("弹出的栈顶元素 e=%d\n",e);
        printf("栈空否:%d(1:空 0:否)\n",StackEmpty(s));
        GetTop(s,&e);
        printf("栈顶元素 e=%d 栈的长度为%d\n",e,StackLength(s));
        ClearStack(&s);
        printf("清空栈后,栈空否:%d(1:空 0:否)\n",StackEmpty(s));
        return 0;
}
Exemple #14
0
int main()
{
    int a;
    SqStack S;
    SElemType x, e;
    if(InitStack(S))    // 判断顺序表是否创建成功,请填空
    {
        printf("A Stack Has Created.\n");
    }
    while(1)
    {
        printf("1:Push \n2:Pop \n3:Get the Top \n4:Return the Length of the Stack\n5:Load the Stack\n0:Exit\nPlease choose:\n");
        scanf("%d",&a);
        switch(a)
        {
        case 1:
            scanf("%d", &x);
            if(!Push(S,x)) printf("Push Error!\n"); // 判断Push是否合法,请填空
            else printf("The Element %d is Successfully Pushed!\n", x);
            break;
        case 2:
            if(!Pop(S,e)) printf("Pop Error!\n"); // 判断Pop是否合法,请填空
            else printf("The Element %d is Successfully Poped!\n", e);
            break;
        case 3:
            if(!GetTop(S,e))printf("Get Top Error!\n"); // 判断Get Top是否合法,请填空
            else printf("The Top Element is %d!\n", e);
            break;
        case 4:
            printf("The Length of the Stack is %d!\n",StackLength(S)); //请填空
            break;
        case 5:
            StackTraverse(S);  //请填空
            break;
        case 0:
            return 1;
        }
    }
}
Exemple #15
0
int main(void)
{
	int select;		/*保存选择变量*/
	Elem e;			/*保存从函数返回的结点的值*/
	Elem v;			/*保存传递给函数的结点的值*/
	
	size_t i= 0;
	LINKSTACK S;
	InitStack(&S);	/*初始化栈*/

	srand((int)time(NULL));

	while (1)	/*while_@1*/
	{
		if (!(S.pBottom))
		{
			printf("栈不存在!\n");
			break;
		}

		system("cls");
		Menu();

		printf("请输入您的选择(1~9):");
		scanf("%d", &select);
		getchar();

		switch (select)	/*switch_@1*/
		{
		case 1:			/*入栈.*/
			v = InputValue("入栈元素为:");
			Push(&S, v);
			printf("入栈操作成功!\n");
			
			getchar();
			break;
		case 2:			/*输出栈中元素.*/
			printf("栈为:");
			TraveStack(&S);
			
			getchar();
			break;
		case 3:			/*出栈.*/
			if (OK == Pop(&S, &e))
			{
				printf("出栈成功,出栈元素是%d!\n", e);
			}
			else
			{
				printf("出栈失败!\n");
			}

			getchar();
			break;

		case 4:			/*输出栈的长度.*/
			printf("栈长为: %d \n", StackLength(&S));
			
			getchar();
			break;

		case 5:			/*清空栈.*/
			ClearStack(&S);
			printf("该栈已经清空!\n");
			
			getchar();
			break;
	
		case 6:			/*销毁栈.*/
			DestroyStack(&S);
			printf("栈已删除!\n");
			
			getchar();	
			break;
			
		case 7:			/*返回栈顶结点元素.*/
			if (OK == GetTop(&S, &e))
			{
				printf("栈顶为:%d\n", e);
			}
			else
			{
				printf("不存在栈顶元素!\n");
			}

			getchar();	
			break;

		case 8:			/*判断栈是否为空.*/
			if (StackEmpty(&S) == TRUE)
			{
				printf("栈为空!\n");
			}
			else
			{
				printf("栈非空!\n");
			}

			getchar();	
			break;

		case 9:			/*进制转换*/
			{
				int d;
				unsigned int m, n;
				v = InputValue("请输入一个非负整数:");
				d = InputValue("请输入转换进制:");
				if (v < 0 ||d<2 ||d>16)
				{
					printf("输入数据错误!\n");
					break;
				}
				
				m = (unsigned int)v;
				n = (unsigned int)d;
				Conversion_ten_to_n(m, n);
			
				getchar();
				break;
			}

		default:
			printf("请重新选择!\n");
			
			getchar();
			break;
		}/*switch_@1*/

	}	/*while_@1*/
	
	return EXIT_SUCCESS;
}
Exemple #16
0
int main()
{
	int j;
	SqStack s;
	SElemType e;

	if( InitStack(&s) == OK )
		for(j = 1; j <= 9; j++)
			Push(&s, j);

	printf("The items in the stack is: \n");
	StackTraverse(s, visit);

	Pop(&s, &e);
	printf("The item popped is: %d\n", e);
	printf("\n");

	printf("The stack is empty now? empty:1, not empty:0\t%d\n", StackEmpty(s));
	printf("\n");

	GetTop(s, &e);
	printf("The item at the top of the stack is: %d, the length of the stack is: %d\n",e, StackLength(s));
	printf("\n");

	ClearStack(&s);
	printf("The stack cleared, is the stack empty? empty:1, not empty:0, %d\n", StackEmpty(s));
	printf("\n");

	DestroyStack(&s);
	
	return 0;
}
/**
 * @brief  get queue length.
 *
 * @param[in]      Q     queue struct pointer
 *
 * @return queue length
 */
CommonType QueueLength(Queue* Q)
{
    assert(Q != NULL);
    return StackLength(&Q->s1) + StackLength(&Q->s2);
}