1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關閉右側工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      c語言用棧隊列函數(shù) 用棧實現(xiàn)隊列c語言

      棧與隊列的應用(C語言)求解

      #include "stdio.h"

      薛城ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

      #include "malloc.h"

      typedef struct node1{

      int *data;

      int top;

      void init(void);

      void del(void);

      int pop(int);

      void push(int);

      }s;

      void node1::init(){

      data=(int*)malloc(sizeof(int)*100);

      top=0;

      }

      void node1::del(){

      free(data);

      top=0;

      }

      int node1::pop(int e){

      if(top==0)return 0;

      e=data[--top];

      return 1;

      }

      void node1::push(int e){

      if(top==100)return;

      data[top++]=e;

      }

      typedef struct node2{

      int *data;

      int top;

      int bottom;

      void init(void);

      void del(void);

      int pop(int);

      void push(int);

      void format(s);

      }q;

      void node2::init(){

      data=(int*)malloc(sizeof(int)*100);

      top=bottom=0;

      }

      void node2::del(){

      free(data);

      top=bottom=0;

      }

      int node2::pop(int e){

      if(top==bottom)return 0;

      e=data[top++];

      return 1;

      }

      void node2::push(int e){

      if(bottom==100)return;

      data[bottom++]=e;

      }

      void node2::format(s e){

      int a;

      while(e.pop(a)){

      push(a);

      }

      }

      int main(){

      s b;q c;

      int a;

      b.init();c.init();

      printf("輸入棧中的數(shù),以0結尾\n");

      while(1){

      scanf("%d",a);

      if(a==0)break;

      b.push(a);

      }

      c.format(b);

      while(c.pop(a)){

      printf("%d\n",a);

      }

      b.del();

      c.del();

      return 0;

      }//b為棧,c為隊列,c.format(b)為轉換函數(shù)

      c語言堆棧和隊列

      棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

      隊列是一種特殊的線性表,特殊之處在于它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

      以上是從數(shù)據(jù)結構角度來看,從操作系統(tǒng)角度來看,所有的數(shù)據(jù)結構都是對虛擬內存的操作,堆是堆,棧是棧,棧指的是C語言函數(shù)所使用的自動有函數(shù)回收的虛擬內存空間,而堆則有操作系統(tǒng)堆管理器來管理的那部分虛擬內存,從C語言角度來看,使用malloc函數(shù)動態(tài)分配的內存,就是堆內存。

      C語言 數(shù)據(jù)結構 隊列和棧問題

      給你看下棧的頭文件

      你自己添加判斷是否是回文的方法吧

      #ifndef STACK_H

      #define STACK_H

      #include iostream

      using std::ostream;

      //template class Type

      //class Stack;

      //template class Type

      //ostream operator (ostream , const StackType );

      template class Type

      class Stack {

      friend ostream operator (ostream , const StackType );

      public:

      static const int DefaultSize;

      Stack(int = DefaultSize); //創(chuàng)建一個最大容量為MaxStackSize的空棧

      Stack(Type[], int, int = DefaultSize); //用數(shù)組初始化棧

      ~Stack(){ delete [] stack; }

      bool IsFull(); //若元素個數(shù)等于棧的最大容量則返回TRUE,否則返回FALSE

      void Add(const Type ); //若IsFull()為TRUE,則調用StackFull,否則將item插入棧頂

      bool IsEmpty(); //若棧中元素個數(shù)等于0則返回TRUE,否則返回FALSE

      Type * Delete(Type); //若IsEmpty()為TRUE,則調用StackEmpty并返回0,

      //否則刪除棧頂元素并返回其指針

      void StackFull(); //將棧的最大容量擴大一倍

      void StackEmpty(); //輸出警告:棧已空, 不能彈出變量

      void Empty(); //將棧清空

      int GetSize(); //獲得棧內元素數(shù)目

      private:

      Type * stack;

      int MaxSize;

      int top;

      };

      template class Type

      const int StackType::DefaultSize = 10;

      template class Type

      StackType::Stack(int pMaxSize) {

      MaxSize = pMaxSize;

      stack = new Type[MaxSize];

      top = -1;

      }

      template class Type

      StackType::Stack(Type pArray[], int pLen, int pMaxSize) {

      stack = new Type[pMaxSize];

      for ( int i = 0; i pLen; i++ )

      {

      stack[i] = pArray[i];

      }

      top = pLen - 1;

      MaxSize = pMaxSize;

      }

      template class Type

      inline bool StackType::IsFull() {

      if (top == MaxSize - 1) return true;

      else return false;

      }

      template class Type

      inline bool StackType::IsEmpty() {

      if (top == -1) return true;

      else return false;

      }

      template class Type

      void StackType::Add(const Type pX) {

      if (IsFull())

      {

      StackFull();

      stack[++top] = pX;

      }

      else stack[++top] = pX;

      }

      template class Type

      Type * StackType::Delete(Type pX) {

      if (IsEmpty())

      {

      StackEmpty();

      return 0;

      }

      pX = stack[top--];

      return pX;

      }

      template class Type

      void StackType::StackEmpty() {

      cout "棧已空,不能進行彈出操作!" endl;

      }

      template class Type

      void StackType::StackFull() {

      Type * nStack = new Type[MaxSize * 2];

      for ( int i = 0; i = top; i++ )

      {

      nStack[i] = stack[i];

      }

      MaxSize = MaxSize * 2;

      delete [] stack;

      stack = nStack;

      cout "棧已滿,棧的自動容量自動擴充為原來的兩倍 (" MaxSize ")" endl;

      }

      template class Type

      ostream operator (ostream pOutput, const StackType pS) {

      if (pS.top == -1)

      {

      pOutput "空棧" endl;

      return pOutput;

      }

      for ( int i = 0; i = pS.top; i++ )

      {

      pOutput pS.stack[i] " ";

      }

      return pOutput;

      }

      template class Type

      void StackType::Empty() {

      top = -1;

      }

      template class Type

      int StackType::GetSize() {

      return top + 1;

      }

      #endif

      計算機c語言中 什么是棧和隊列

      棧(Stack)是僅限制在表的一端進行插入和刪除運算的線性表,稱插入、刪除這一端為棧頂,另一端稱為棧底。表中無元素時為空棧。棧 的修改是按后進先出的原則進行的,我們又稱棧為LIFO表(Last In First Out)。通常棧有順序棧和鏈棧兩種存儲結構。 棧的基本運算有六種: ·構造空棧:InitStack(S) ·判棧空: StackEmpty(S) ·判棧滿: StackFull(S) ·進棧: Push(S,x) ·退棧: Pop(S) ·取棧頂元素:StackTop(S) 在順序棧中有"上溢"和"下溢"的現(xiàn)象。 ·"上溢"是棧頂指針指出棧的外面是出錯狀態(tài)。 ·"下溢"可以表示棧為空棧,因此用來作為控制轉移的條件。 順序棧中的基本操作有六種:·構造空棧·判棧空·判棧滿·進棧·退棧·取棧頂元素 鏈棧則沒有上溢的限制,因此進棧不要判棧滿。鏈棧不需要在頭部附加頭結點,只要有鏈表的頭指針就可以了。 鏈棧中的基本操作有五種:·構造空棧·判棧空·進棧·退棧·取棧頂元素 隊列(Queue)是一種運算受限的線性表,插入在表的一端進行,而刪除在表的另一端進行,允許刪除的一端稱為隊頭(front),允許插入的 一端稱為隊尾(rear) ,隊列的操作原則是先進先出的,又稱作FIFO表(First In First Out) 。隊列也有順序存儲和鏈式存儲兩種存儲結 構。 隊列的基本運算有六種: ·置空隊:InitQueue(Q) ·判隊空:QueueEmpty(Q) ·判隊滿:QueueFull(Q) ·入隊:EnQueue(Q,x) ·出隊:DeQueue(Q) ·取隊頭元素:QueueFront(Q) 順序隊列的"假上溢"現(xiàn)象:由于頭尾指針不斷前移,超出向量空間。這時整個向量空間及隊列是空的卻產(chǎn)生了"上溢"現(xiàn)象。 為了克服"假上溢"現(xiàn)象引入循環(huán)向量的概念,是把向量空間形成一個頭尾相接的環(huán)形,這時隊列稱循環(huán)隊列。 判定循環(huán)隊列是空還是滿,方法有三種: ·一種是另設一個布爾變量來判斷; ·第二種是少用一個元素空間,入隊時先測試((rear+1)%m = front)? 滿:空; ·第三種就是用一個計數(shù)器記錄隊列中的元素的總數(shù)。 隊列的鏈式存儲結構稱為鏈隊列,一個鏈隊列就是一個操作受限的單鏈表。為了便于在表尾進行插入(入隊)的操作,在表尾增加一個尾指 針,一個鏈隊列就由一個頭指針和一個尾指針唯一地確定。鏈隊列不存在隊滿和上溢的問題。在鏈隊列的出隊算法中,要注意當原隊中只 有一個結點時,出隊后要同進修改頭尾指針并使隊列變空。

      c語言實現(xiàn)隊列和棧的方法

      #define OVERFLOW -1

      #define OK 1

      #define ERROR 0

      #define STACK_INIT_SIZE 100

      #define STACKINCREMENT 10

      #define N 20

      typedef char SElemType;

      typedef int Status;typedef struct {

      SElemType *base;

      SElemType *top;

      int stacksize;

      }SqStack;#includestdio.h

      #includestdlib.hStatus CreatStack(SqStack S){

      //創(chuàng)建棧

      S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));

      if(!S.base)exit(OVERFLOW);

      S.top=S.base;

      S.stacksize=STACK_INIT_SIZE;

      return OK;

      }//CreatStackStatus Push(SqStack S,SElemType e){

      //插入e為新的棧頂元素

      if(S.top-S.base=S.stacksize){//棧滿,追加存儲空間

      S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));

      if(!S.base)exit (OVERFLOW);//存儲空間分配失敗

      S.top=S.base+S.stacksize;

      S.stacksize+=STACKINCREMENT;

      }

      *S.top++=e;

      return OK;

      }//PushStatus Pop(SqStack S ,SElemType e){

      //若棧不空,刪除棧頂元素,并用e返回其值

      if(S.top==S.base) return ERROR;

      e=*--S.top;

      return OK;

      }//Pop typedef char QElemType;

      typedef struct QNode{

      QElemType data;

      struct QNode *next;

      }QNode,*QNodePtr;typedef struct{

      QNodePtr front;

      QNodePtr rear;

      }LinkQueue;Status CreatQueue(LinkQueue Q){

      //建立一個空的鏈式棧

      Q.front=Q.rear=(QNodePtr)malloc(sizeof(QNode));

      if(!Q.front)exit(OVERFLOW);

      Q.front-next=NULL;

      return OK;

      }Status EnQueue(LinkQueue Q,QElemType e){ QNodePtr p;

      p=(QNodePtr)malloc(sizeof(QNode));

      if(!p)exit(OVERFLOW);

      p-data=e;p-next=NULL;

      Q.rear-next=p;

      Q.rear=p;

      return OK;

      }Status DeQueue(LinkQueue Q,QElemType e){QNodePtr p;brif(Q.front==Q.rear) return ERROR;brp=Q.front-next; e=p-data;brQ.front-next=p-next;brif(Q.rear==p) Q.rear=Q.front;brfree(p);brreturn OK;br}int stackPalindrom_Test()//判別輸入的字符串是否回文序列,是則返回1,否則返回0

      {

      printf("棧練習,請輸入要判斷的字符串以#作為結束符,不要超過二十個字符\n");

      SqStack S;

      CreatStack(S);

      char c;

      SElemType a;

      SElemType b[N];

      int count = 0;

      fgets( b, N, stdin );

      while((b[count])!='#')

      {

      Push(S,b[count]); //進棧

      count++;

      }

      int i = 0;

      while(i count)

      {

      Pop(S,a);

      if(a!=b[i])

      return ERROR;

      i++;

      }

      return OK;}//stackPalindrom_Test int queuePalindrom_Test()//判別輸入的字符串是否回文序列,是則返回1,否則返回0

      {

      printf("隊列練習,請輸入要判斷的字符串以#作為結束符,不要超過二十個字符\n");

      LinkQueue Q;

      CreatQueue(Q); char c;

      SElemType a;

      SElemType b[N];

      int count = 0;

      fgets( b, N, stdin );

      while((b[count])!='#')

      {

      EnQueue(Q,b[count]);; //入列

      count++;

      } while(count-- 0)

      {

      DeQueue(Q,a);

      if(a!=b[count])

      return ERROR;

      }

      return OK;

      }//queuePalindrom_Test Status main(){ if(stackPalindrom_Test()==1)

      printf("是回文\n");

      else printf("不是回文\n"); if(queuePalindrom_Test()==1)

      printf("是回文\n");

      else printf("不是回文\n");

      return OK;

      }


      本文標題:c語言用棧隊列函數(shù) 用棧實現(xiàn)隊列c語言
      文章地址:http://www.ef60e0e.cn/article/hjeceo.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        普安县| 股票| 英超| 仙游县| 浦北县| 玉龙| 成都市| 水城县| 柘荣县| 阿鲁科尔沁旗| 常州市| 景德镇市| 松滋市| 高青县| 兰考县| 大田县| 拉萨市| 高碑店市| 城口县| 沁源县| 东宁县| 琼中| 原阳县| 阿克苏市| 孟村| 红桥区| 天门市| 玛多县| 弥勒县| 犍为县| 扬中市| 荣昌县| 玛多县| 聂荣县| 安溪县| 观塘区| 德令哈市| 广宁县| 浪卡子县| 青河县| 丰台区|