C言語およびリンクスタックの基本的な操作

リンクスタックすなわち使用して、リンクリストは、スタックストレージ構造を実装しました。スタックの類似の程度のアイデアを実現リンクスタックは、順次スタックの数であり、配列表(配列)スタックの底、及びスタックの他方の端部の一方の端部の、リンクスタックは尾部としても、我々は通常、スタックとしてリストの先頭になるの場合であります以下に示すように、スタックの底:
ここに画像を挿入説明

頭のリンクリストとしてスタックの最後に、「スタック」にデータのリスト操作を横断多数を作るとする時間のかかる操作を避けるために、「ポップ」。

スタックのトップとして、リストの先頭、手段:

  • 「データの実装では、スタック操作、データのニーズを」リストの先頭から挿入されます。
  • 「データの実施にポップ動作」を、最初の要素ノードがリストの先頭を削除する必要があります。

したがって、リンクスタックは、実際にのみ使用補間データが挿入または削除されたリストのヘッドです。

リンクスタック要素の描画

例えば、スタック要素を順次1,2,3,4、以下のように追加処理の各データ要素のために、順次リストに追加補間を用いて各要素の頭部に相当する:

C言語コード:

//链表中的节点结构
typedef struct lineStack{
    int data;
    struct lineStack * next;
}lineStack;
//stack为当前的链栈,a表示入栈元素
lineStack* push(lineStack * stack,int a){
    //创建存储新元素的节点
    lineStack * line=(lineStack*)malloc(sizeof(lineStack));
    line->data=a;
    //新节点与头节点建立逻辑关系
    line->next=stack;
    //更新头指针的指向
    stack=line;
    return stack;
}

リンクスタックポップの要素

例えば、素子積層体に、図3に示したリンクスタックは、原則として「最後のアウト」、スタック4の最初の要素に応じて、すなわち、リストから削除し、次にスタックに素子3下に示すように全体の動作:
ここに画像を挿入説明
このように、上部要素C言語リンクスタック実装コードを達成するためには、次のとおりです。

//栈顶元素出链栈的实现函数
lineStack * pop(lineStack * stack){
    if (stack) {
        //声明一个新指针指向栈顶节点
        lineStack * p=stack;
        //更新头指针
        stack=stack->next;
        printf("出栈元素:%d ",p->data);
        if (stack) {
            printf("新栈顶元素:%d\n",stack->data);
        }else{
            printf("栈已空\n");
        }
        free(p);
    }else{
        printf("栈内没有元素");
        return stack;
    }
    return stack;
}

ユーザーが実行を回避するために、if文使って、コードの「スタックが空であるだけでなく、スタックは」誤操作。

概要

#include <stdio.h>
#include <stdlib.h>
typedef struct lineStack{
    int data;
    struct lineStack * next;
}lineStack;
lineStack* push(lineStack * stack,int a){
    lineStack * line=(lineStack*)malloc(sizeof(lineStack));
    line->data=a;
    line->next=stack;
    stack=line;
    return stack;
}
lineStack * pop(lineStack * stack){
    if (stack) {
        lineStack * p=stack;
        stack=stack->next;
        printf("弹栈元素:%d ",p->data);
        if (stack) {
            printf("栈顶元素:%d\n",stack->data);
        }else{
            printf("栈已空\n");
        }
        free(p);
    }else{
        printf("栈内没有元素");
        return stack;
    }
    return stack;
}
int main() {
    lineStack * stack=NULL;
    stack=push(stack, 1);
    stack=push(stack, 2);
    stack=push(stack, 3);
    stack=push(stack, 4);
    stack=pop(stack);
    stack=pop(stack);
    stack=pop(stack);
    stack=pop(stack);
    stack=pop(stack);
    return 0;
}

プログラムの結果:

要素をポップ:上部要素4:3つの
飛び出る要素:トップエレメント3:2つの
ポップ要素:トップ要素2:1つの
飛び出る要素:1スタックは空にされていない
スタック内にない要素

これらは、アヒルの支持を得ることを期待して、C言語、2月の最初のポストを使用してリンクスタックを共有するために皆のための時間です!あなたは私に、追加のC言語データ構造、アルゴリズム、および歓迎に関する情報が必要な場合も、個人のブログ、私たちはより良いアルゴリズム、以下のコメントセクションにウェルカムメッセージがあり、何かがひどく書かれている場合、話し合います!一緒に私たちの共通の進歩!

公開された19元の記事 ウォンの賞賛8 ビュー604

おすすめ

転載: blog.csdn.net/qq_43336390/article/details/104137347