ACM内部函数11

七、数据结构

1.顺序队列

源程序:

#define maxsize 100

typedef struct

{

    int data[maxsize];

    int front;

    int rear;

} sqqueue; 

int sqinit(sqqueue *p) //队列初始化

{

    p->front=0;

    p->rear=0;

    return 1;

}

int enqueue(sqqueue *q, int e) //入队

{

    if((q->rear+1)%maxsize==q->front)

        return 0;

    else

        q->data[q->rear]=e;

    q->rear=(q->rear+1)%maxsize;

    return 1;

}

int dequeue(sqqueue *q) //出队

{

    int e;

    if (q->front==q->rear)

        return 0;

    e=q->data[q->front];

    q->front=(q->front+1)%maxsize;

    return e;

}

int empty(sqqueue *q)  //判空

{

    int v;

    if (q->front==q->rear)

        v=1;

    else

        v=0;

     return v; 

}

int gethead(sqqueue *q)  //取得头元素

{

    int e;

    if (q->front==q->rear) 

        e=-1;

    else

        e=q->data[q->front];

    return e;

}

void display(sqqueue *q) //显示所有元素

{

    int s;

    s=q->front;

    printf("the sequeue is display:/n");

    if (q->front==q->rear)

        printf("the sequeue is empty!");

    else

        {

        while(s<q->rear)

            {

            printf("->%d", q->data[s]);

            s=(s+1)%maxsize;

            } 

    printf("/n");

}

}

main(sqqueue *head)  //函数使用样例

{

    int n,i,m,x,y,select,xq;

    printf("create a empty sequeue/n");

    sqinit(head);

    printf("please input the sequeue length:/n"); 

    scanf("%d",&n);

    for (i=0;i<n;i++)

        {

        printf("please input a sequeue value:/n");

        scanf("%d",&m);

        enqueue(head,m);

       }

    printf("head->rear:%d/n",head->rear);

    printf("head->front:%d/n",head->front);

    display(head);

    printf("select 1 **** enqueue() /n");

    printf("select 2 **** dequeue() /n");

    printf("select 3 **** empty () /n");

    printf("select 4 **** gethead() /n");

    printf("select 5 **** display() /n");

    printf("please select (1--5):");

    scanf("%d",&select);

    switch(select)

        {

        case 1:

            { 

            printf("please input a value :/n ");

            scanf("%d",&x);

            enqueue(head,x);

            display(head);

            break;

            }

        case 2:

            {

            dequeue(head);

            display(head);

            break;

            }

        case 3:

            {

        if(empty(head))

            printf("the sequeue is empty");

        else

            printf("the sequeue is full");

            }

        case 4:

            {

            y=gethead(head);

            printf("output head value:%d/n",y);

            break;

            }

        case 5:

            {

            display(head);

            break;

            }

        }

    }

2.顺序栈

源程序:

#define m 100

typedef struct

{

    int stack[m];

    int top;

} stackstru; 

init(stackstru *s) /*装入栈*/

{

    s->top=0;

    return 1;

}

int push(stackstru *s,int x) /*入栈操作*/

{

    if (s->top==m)

        printf("the stack is overflow!/n");

    else

        {

        s->top=s->top+1;

        s->stack[s->top]=x;

        }

}

void display(stackstru *s) /*显示栈所有数据*/

{

    if(s->top==0)

        printf("the stack is empty!/n");

    else

        {

        while(s->top!=0)

            {

            printf("%d->",s->stack[s->top]);

            s->top=s->top-1;

            }

        }

}

int pop(stackstru *s) /*出栈操作并返回被删除的那个记录*/

{

    int y;

    if(s->top==0)

        printf("the stack is empty!/n");

    else

        {

        y=s->stack[s->top];

        s->top=s->top-1;

        return y;

        }

}

int gettop(stackstru *s) /*得到栈顶数*/

    int e;

    if(s->top==0)

        return 0;

    else 

        e=s->stack[s->top];

    return e;

}

main(stackstru *p) //函数使用演示

{

    int n,i,k,h,x1,x2,select;

    printf("create a empty stack!/n");

    init(p);

    printf("input a stack length:/n");

    scanf("%d",&n);

    for(i=0;i<n;i++)

        {

        printf("input a stack value:/n");

        scanf("%d",&k);

        push(p,k);

        }

    printf("select 1:display()/n");

    printf("select 2:push()/n");

    printf("select 3:pop()/n");

    printf("select 4:gettop()/n");

    printf("input a your select(1-4):/n");

    scanf("%d",&select);

    switch(select)

        {

        case 1:

            {

            display(p);

            break;

            }

        case 2:

            {

            printf("input a push a value:/n");

            scanf("%d",&h);

            push(p,h);

            display(p);

            break;

            }

        case 3:

            {

            x1=pop(p);

            printf("x1->%d/n",x1);

            display(p);

            break;

            }

        case 4:

            {

            x2=gettop(p);

            printf("x2->%d",x2);

            break;

            }

        }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值