久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3288|回復: 0
打印 上一主題 下一主題
收起左側

棧和隊列的源代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:126856 發表于 2016-6-15 15:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<stdio.h>
#include<stdlib.h>
#include <cstdio>
#include <cstdlib>
#include <windows.h>

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 100
#define OVERFLOW -2
#define OK 1
#define ERROR 0

typedef int SElemType;
typedef int Status;
typedef struct
{
    SElemType *base;//棧底指針
    SElemType *top;//棧頂指針
    int stacksize;//棧的最大容量
}SqStack;                  //順序棧類型定義


typedef int elemtype;
typedef  struct node                    //隊列結點類型定義
{    elemtype data;                     //隊列的數據元素類型
     struct node  *next;                 //指向后繼結點的指針
}NODE;
typedef struct
{                          //定義鏈隊
    NODE *front,*rear;//定義鏈隊隊頭和隊尾指針
}LINKQUEUE;


Status InitStack(SqStack &s);    //初始化棧
Status DisplayStack(SqStack s);  //輸出棧
Status ClearStack(SqStack &s);//清空棧
bool StackEmpty(SqStack s);     //棧是否為空
Status Push(SqStack &s,SElemType e); //入棧
Status Pop(SqStack &s,SElemType &e); //出棧
Status GetTop(SqStack s,SElemType &e); //取棧頂數據元素
void menu(SqStack s,LINKQUEUE *p);//顯示菜單


//初始化棧

Status InitStack(SqStack &s)
{
    s.base = (SElemType *)malloc(sizeof(SElemType));
    if(!s.base)
            exit(OVERFLOW);
        s.top = s.base;
        s.stacksize = STACK_INIT_SIZE;
        return OK;
}

//輸出棧
Status DisplayStack(SqStack s)
{
        if(s.base == NULL)
        {
                printf("棧不存在或者已被銷毀!");
                return ERROR;
        }
        if(StackEmpty(s))
        {
                printf("這是一個空棧!");
                return ERROR;
        }
        SElemType *p = s.top;
        while(p != s.base)
        {
                p--;
                printf("%d ", *p);
        }
        printf("\n");
        return OK;
}

//棧是否為空
bool StackEmpty(SqStack s)
{
        if(s.base == s.top)
                return true;
        else
                return false;
}

//棧元素個數
int StackLength(SqStack s)
{
        return s.top - s.base;
}


//入棧
Status Push(SqStack &s,SElemType e)
{
        if(StackLength(s) >= s.stacksize)
        {
                s.base = (SElemType *)realloc(s.base, (s.stacksize+STACKINCREMENT) * sizeof(SElemType));
                if(!s.base)
                        return ERROR;
                s.top = s.base + s.stacksize;
                s.stacksize += STACKINCREMENT;
        }
        *(s.top++) = e;
        return OK;
}


//出棧
Status Pop(SqStack &s,SElemType &e)
{
        if(StackEmpty(s))
                return ERROR;
        e = * --s.top;
        return OK;
}

//清空棧
Status ClearStack(SqStack &s)  
{
        s.base = s.top;
        return OK;
}

//取棧頂數據元素
Status GetTop(SqStack s,SElemType &e)
{
        if(StackEmpty(s))
                return ERROR;
        e = *(s.top - 1);
        return OK;
}

void initqueue(LINKQUEUE *QL)//隊列的初始化
{
        QL->front=(NODE *)malloc(sizeof(NODE));//隊列為帶頭結點的鏈隊列
        QL->front->next=NULL;
        QL->rear=QL->front;
}

LINKQUEUE  *pushqueue(LINKQUEUE *QL,elemtype x)
{ //將元素x插入到鏈隊列QL中,作為QL的新隊尾
        QL->rear->next=(NODE *)malloc(sizeof(NODE));
        QL->rear->next->data=x;
        QL->rear=QL->rear->next;
        QL->rear->next=NULL;
        return QL;

}

elemtype popqueue(LINKQUEUE *QL)  
{  //若鏈隊列不為空,則刪除隊頭元素,返回其元素值
        NODE *newnode;
        newnode=QL->front->next;
        if(newnode==NULL)
                return 0;
        newnode=QL->front;
        QL->front=QL->front->next;
        free(newnode);
        return(QL->front->data);

}

void printqueue(LINKQUEUE *QL)//隊列的顯示
{
        NODE *p;
        p=QL->front->next;
        if(p==NULL)
                printf("隊列空!");
        while(p!=NULL)
        {
                if(p->next==NULL)
                   printf("%d",p->data);
                else
           printf("%d<--",p->data);
            p=p->next;
        }
        printf("\n");
}








//主菜單
void menu(SqStack s,LINKQUEUE *p)
{
        int length,i,n,j,x,elemdata,y;
        SElemType elem;
        p=(LINKQUEUE *)malloc(sizeof(LINKQUEUE));
        initqueue(p);
        while(1)
        {
                printf("——————主菜單——————\n");
                printf("1.初始化順序棧\n");
                printf("2.插入一個元素\n");
                printf("3.刪除棧頂元素\n");
                printf("4.置空順序棧\n");
                printf("5.棧頂元素\n");
                printf("6.輸出順序棧\n");
                printf("7.入隊列\n");
                printf("8.出隊列\n");
                printf("9.遍歷整個隊列\n");
                printf("0.退出\n");
                scanf("%d",&x);
                switch(x)
                {
                case 1:
                        SElemType e;
                        InitStack(s);
                        printf("請輸入您要入棧的元素個數:");
                        scanf("%d", &n);
                        printf("請輸入要入棧的元素內容:\n");
                        for(j = 0; j <n; j++)
                        {
                                SElemType t;
                                scanf("%d", &t);
                                Push(s, t);
                        }
                        break;
                case 2:
                        printf("請輸入要入棧的元素內容:");
                        scanf("%d", &elem);
                        Push(s, elem)?printf("入棧成功!"):printf("入棧失敗!");
                        break;
                case 3:
                        Pop(s, elem)?printf("出棧成功!"):printf("出棧失敗!");
                        printf("\n出棧的元素內容為:%d", elem);
                        break;
                case 4:
                        ClearStack(s);
                        printf("順序棧已清空!");
                        break;
                        break;
                case 5:
                        GetTop(s, elem);
                        printf("\n棧頂元素:%d", elem);
                        break;
                case 6:
                        DisplayStack(s);
                        break;
                case 7:
                        printf("請輸入進隊元素:");
                    scanf("%d",&elemdata);
            p=pushqueue(p,elemdata);
                        printf("隊列中的元素為:\n");
            printqueue(p);
//                        system("pause");

                        break;
                case 8:
                        y=popqueue(p);
//                        if(y!=0)
                                printf("元素%d出隊!\n",y);
                        printf("隊列中的元素為:\n");
            printqueue(p);
//                        system("pause");
                        break;
                case 9:
                        printf("隊列中的元素分別為:\n");
                    printqueue(p);
                        system("pause");
                        break;
                case 0:
                        exit (0);
                        break;
                default:
                        printf("error\n");
                }
        }

}


//主函數

main()
{
        SqStack s;
        LINKQUEUE *p;
        menu(s,p);

       
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久综合九九 | 97色在线观看免费视频 | 亚洲成人在线免费 | av片免费| 一区二区在线不卡 | 一区二区免费 | 亚洲国产区| 亚洲欧美日韩在线一区二区 | 日本不卡免费新一二三区 | 国产高清一区二区 | 成人在线免费视频观看 | 精品日本久久久久久久久久 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 狠狠狠色丁香婷婷综合久久五月 | 香蕉久久久久久 | 国产精品美女www | 国产91在线精品 | 亚洲iv一区二区三区 | 国产精品高潮呻吟久久av野狼 | 国产乱码久久久久久一区二区 | 第一福利社区1024 | 99久久免费精品 | 国产一区精品在线 | 日韩天堂av | 亚洲视频免费在线观看 | 在线国产视频 | 综合色在线| 午夜免费精品视频 | 免费成人午夜 | 欧美一级欧美三级在线观看 | 中文字幕在线一区二区三区 | 国产精品日本一区二区在线播放 | 天天亚洲 | 伊人爽 | 在线一区视频 | 亚洲高清视频在线观看 | 九九精品在线 | 成人精品啪啪欧美成 | 91小视频在线 | 国产日韩亚洲欧美 | 国产美女在线观看 |