c语言 队列长度,c语言 队列
棧是限定盡在表尾進行插入或刪除的線性表(先進先出)。對棧來說,表尾稱為棧頂,表頭稱為棧底。
現在以下面的程序說明對棧的基本操作。
#include#include#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 12
#define ADD 2
typedef struct{
int *base;
int *top;
int stacksize;
}Stack;
int InitStack(Stack *S)????????????????????? //初始化
{
S->base=(int *)malloc(STACK_INIT_SIZE * sizeof(int));
if(!S->base)
exit(1);
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
return OK;
}
int Push(Stack *S,int e)??????????????????? //入棧
{
if(S->top - S->base >= S->stacksize)
{
S->base = (int *)realloc(S->base,(S->stacksize+ADD)*sizeof(int));
if(!S->base)
exit(1);
S->top=S->base+S->stacksize;
S->stacksize+=ADD;
}
*(S->top)++=e;
return OK;
}
int Pop(Stack *S,int *e)??????????????????? //出棧
{
if(S->top==S->base)
return ERROR;
*e=*(--S->top);
return OK;
}
int visit(int c)
{
printf("%d ",c);
return OK;
}
int StackTraverse(Stack S,int (*visit)(int))?? //遍歷
{
while(S.top>S.base)
visit(*S.base++);
printf("\n");
return OK;
}
int StackEmpty(Stack S)??????????????????????? //判斷棧是否為空
{
if(S.top == S.base)
return TRUE;
else
return FALSE;
}
int DestroyStack(Stack *S)???????????????????? //銷毀棧
{
free(S->base);
S->base=NULL;
S->top=NULL;
S->stacksize=0;
return OK;
}
int ClearStack(Stack *s)????????????????????? //棧置為空
{
s->top = s->base;
return OK;
}
int StackLength(Stack S)??????????????????? //棧的深度
{
return (S.top-S.base);
}
int GetTop(Stack S,int *e)????????????????? //獲取棧頂元素
{
if(S.top==S.base)
return ERROR;
*e = *(S.top-1);
return OK;
}
int main(void)
{
int j;
Stack s;
int e;
if(InitStack(&s))??????????????????????????????????????? //新建
for(j=0;j<5;j++)
Push(&s,j);???????????????????????????????????????? ?//入棧
printf("棧中元素依次為:");
StackTraverse(s,visit);??????????????????????????????????????? //第一次遍歷
Pop(&s,&e);??????????????????????????????????????????????????? //出棧
printf("彈出的棧頂元素 e=%d\n",e);
printf("棧中元素依次為:");
StackTraverse(s,visit);??????????????????????????????????????? //次遍歷
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));
DestroyStack(&s);???????????????????????????????????????????? //銷毀棧
printf("銷毀棧后,s.top=%u s.base=%u s.stacksize=%d\n",s.top,s.base, s.stacksize);
return 0;
}
#include#include#include
#define STACK_SIZE 5
#define OK 1
#define ERROR 0
typedef struct? note
{
int x;
int y;
}Note;
typedef struct
{
Note *base;
Note *top;
int stack_size;
}Stack;
int init_stack(Stack *p)
{
p->base=malloc(STACK_SIZE * sizeof(struct note));
if(!p->base)
exit(1);
p->top=p->base;
p->stack_size=STACK_SIZE;
return OK;
}
int push(Stack *p,Note e)
{
if(p->top - p->base >= p->stack_size)
return ERROR;
else
*(p->top)++=e;
return OK;
}
int Pop(Stack *p,Note *e)?????????????????? //出棧
{
if(p->top==p->base)
return ERROR;
*e=*(--p->top);
return OK;
}
int visit(Note c,Note q)
{
if( c.x!=q.x || c.y!=q.y)
return OK;
else
return ERROR;
}
int stack_traverse(Stack p,int (*visit)(Note, Note),Note q)?? //遍歷查詢
{
int flag=1;
while(p.top > p.base)
{
if(0==visit(*p.base++,q))
return ERROR;
}
return OK;
}
int stack_traverse_print(Stack p)?? //遍歷打印
{
while(p.top>p.base)
{
printf("%d %d\n",p.base->x,p.base->y);
p.base++;
}
return OK;
}
int main()
{
int x=0,y=0,i=0;
int flag=1;
Note q;
Stack p;
init_stack(&p);?? //棧出始化
while(flag)
{
printf("請輸入 X and Y:");
scanf("%d %d",&x,&y);
q.x=x;
q.y=y;
if(1==stack_traverse(p,visit,q))????????????? //遍歷,若棧中已有將加入的數據,則不加入
{
if(0==push(&p,q))???????????????????????? ?//出棧
{
printf("Overflow\n");
break;
}
}
else
printf("The Stack already has this element\n");
printf("是否繼續增加元素(flag=1):");
scanf("%d",&flag);
}
stack_traverse_print(p);
return 0;
}
總結
以上是生活随笔為你收集整理的c语言 队列长度,c语言 队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机ps图片在哪里看,如何在Photo
- 下一篇: 计算机cad名词解释,CAD全部名词解释