プログラミングC: 投稿 15 – スタックをインストールします。 (スタック)
スタック (スタック) 挿入および削除がリストの最後に行われ、我々は先端これを呼び出すことができます順不同リストです (トップ) スタック
この記事では、配列ポインタにインストールし、スタックにする方法を学ぶ
1. スタックアレイにインストール
#define Max 100 //so phan tu toi da cua Stack typedef int item; //kieu du lieu cua Stack struct Stack { int Top; //Dinh Top item Data[Max]; //Mang cac phan tu };
1.1 空のリストを初期化します, チェックリストは空です, フル
void Init (Stack &S) //khoi tao Stack rong { S.Top = 0; //Stack rong khi Top la 0 } int Isempty(Stack S) //kiem tra Stack rong { return (S.Top == 0); } int Isfull(Stack S) //kiem tra Stack day { return (S.Top == Max); // }
1.2 スタックに要素を追加 (押す)
要素を挿入するには1場所スタックトップに挿入, トップアップと葬儀 1 ユニット
void Push(Stack &S, item x) //them phan tu vao Stack { if (!Isfull(S)) { S.Data[S.Top] = x; //Gan du lieu S.Top ++; //Tang Top len 1 } }
1.3 トップ上のデータを取得しますが、削除されていない (ピーク)
int Peak(Stack S) //Lay phan tu o dau Stack nhung khong xoa { return S.Data[S.Top-1]; //Lay du lieu tai Top }
1.4 取り外し、上部のデータを取得する (ポップ)
int Pop(Stack &S) //Loai bo phan tu khoi Stack { if (!Isempty(S)) { S.Top --; //Giam Top return S.Data[S.Top]; //Lay du lieu tai Top } }
1.5 コード全体のプログラム (フル)
#include <stdlib.h> #include <stdio.h> #define Max 100 //so phan tu toi da cua Stack typedef int item; //kieu du lieu cua Stack struct Stack { int Top; //Dinh Top item Data[Max]; //Mang cac phan tu }; void Init (Stack &S); //khoi tao Stack rong int Isempty(Stack S); //kiem tra Stack rong int Isfull(Stack S); //kiem tra Stack day void Push(Stack &S, item x); //them phan tu vao Stack int Peak(Stack S); //Lay phan tu o dau Stack nhung khong xoa int Pop(Stack &S); //Loai bo phan tu khoi Stack void Input (Stack &S); //Nhap Stack void Output(Stack S); //Xuat Stack void Init (Stack &S) //khoi tao Stack rong { S.Top = 0; //Stack rong khi Top la 0 } int Isempty(Stack S) //kiem tra Stack rong { return (S.Top == 0); } int Isfull(Stack S) //kiem tra Stack day { return (S.Top == Max); // } void Push(Stack &S, item x) //them phan tu vao Stack { if (!Isfull(S)) { S.Data[S.Top] = x; //Gan du lieu S.Top ++; //Tang Top len 1 } } int Peak(Stack S) //Lay phan tu o dau Stack nhung khong xoa { return S.Data[S.Top-1]; //Lay du lieu tai Top } int Pop(Stack &S) //Loai bo phan tu khoi Stack { if (!Isempty(S)) { S.Top --; //Giam Top return S.Data[S.Top]; //Lay du lieu tai Top } } void Input (Stack &S) { int n; item x; do { printf("Nhap so phan tu cua Stack (<%d) :",Max); scanf("%d",&n); } while (n>Max || n<1); for (int i=0; i<n; i++) { printf("Nhap phan tu thu %d : ", i+1); scanf("%d",&x); Push(S,x); } } void Output(Stack S) { for (int i=S.Top-1; i>=0; i--) printf("%d ",S.Data[i]); printf("\n"); } int main() { Stack S; Init(S); Input(S); Output(S); int lua_chon; printf("Moi ban chon phep toan voi DS LKD:"); printf("\n1: Kiem tra Stack rong"); printf("\n2: Kiem tra Stack day"); printf("\n3: Them phan tu vao Stack"); printf("\n4: Xoa phan tu trong Stack"); printf("\n5: Xuat Stack"); printf("\n6: Thoat"); do { printf("\nBan chon: "); scanf("%d",&lua_chon); switch (lua_chon) { case 1: { if (Isempty(S)) printf("Stack rong !"); else printf ("Stack khong rong !"); break; } case 2: { if (Isfull(S)) printf("Stack day !"); else printf ("Stack chua day !"); break; } case 3: { item x; printf ("Nhap phan tu can chen vao DS: "); scanf("%d",&x); Push(S,x); break; } case 4: { Pop(S); break; } case 5: { Output(S); break; } case 6: break; } }while (lua_chon !=6); return 0; }
2. スタックカーソルにインストールされている
スタックポインタにスタックがまだ正常に機能しているが、それは、リンクを使用しているため、 ポインタ 割り当てて管理する, 過剰んか何かの欠如.
2.1 建築構造物
typedef int item; //kieu du lieu struct Node { item Data; //du lieu Node *Next; //link }; typedef struct Stack { Node *Top; };
2.2 空のリストを初期化します, チェックリストは空です, 長リスト
void Init (Stack &S) //khoi tao Stack rong { S.Top = NULL; } int Isempty(Stack S) //kiem tra Stack rong { return (S.Top == NULL); } int Len (Stack S) { Node *P = S.Top; int i=0; while (P != NULL) //trong khi chua het Stack thi van duyet { i++; P = P->Next; } return i; }
2.3 作る 1 ノード
Node *MakeNode(item x) //tao 1 Node { Node *P = (Node*) malloc(sizeof(Node)); P->Next = NULL; P->Data = x; return P; }
2.4 スタックに挿入する要素 (押す)
まさにその点とトップノートのスタックポインタに要素を挿入するには, そして、それがトップ終了した時点
void Push(Stack &S, item x) //them phan tu vao Stack { Node *P = MakeNode(x); P->Next = S.Top; S.Top = P; }
2.5 トップ上のデータを取得しますが、削除されていない (ピーク)
int Peak(Stack S) //Lay phan tu o dau Stack nhung khong xoa { return S.Top->Data; }
2.6 取り外し、上部のデータを取得する (ポップ)
一つは、カーソル位置のトップにのみポイントが必要 2 停止.
int Pop(Stack &S) //Loai bo phan tu khoi Stack { if (!Isempty(S)) { item x = S.Top->Data; //luu lai gia tri S.Top = S.Top->Next; //Xoa phan tu Top return x; } }
2.7 完全なプログラム (完全なコード)
#include <stdlib.h> #include <stdio.h> typedef int item; //kieu du lieu struct Node { item Data; //du lieu Node *Next; //link }; typedef struct Stack { Node *Top; }; void Init (Stack &S); //khoi tao Stack rong int Isempty(Stack S); //kiem tra Stack rong int Len (Stack S); //Do dai Stack void Push(Stack &S, item x); //them phan tu vao Stack int Peak(Stack S); //Lay phan tu o dau Stack nhung khong xoa int Pop(Stack &S); //Loai bo phan tu khoi Stack void Input (Stack &S); //Nhap Stack void Output(Stack S); //Xuat Stack Node *MakeNode(item x); //Tao 1 Node void Init (Stack &S) //khoi tao Stack rong { S.Top = NULL; } int Isempty(Stack S) //kiem tra Stack rong { return (S.Top == NULL); } int Len (Stack S) { Node *P = S.Top; int i=0; while (P != NULL) //trong khi chua het Stack thi van duyet { i++; P = P->Next; } return i; } Node *MakeNode(item x) //tao 1 Node { Node *P = (Node*) malloc(sizeof(Node)); P->Next = NULL; P->Data = x; return P; } void Push(Stack &S, item x) //them phan tu vao Stack { Node *P = MakeNode(x); P->Next = S.Top; S.Top = P; } int Peak(Stack S) //Lay phan tu o dau Stack nhung khong xoa { return S.Top->Data; } int Pop(Stack &S) //Loai bo phan tu khoi Stack { if (!Isempty(S)) { item x = S.Top->Data; //luu lai gia tri S.Top = S.Top->Next; //Xoa phan tu Top return x; } } void Input (Stack &S) //nhap danh sach { int i=0; item x; do { i++; printf ("Nhap phan tu thu %d : ",i); scanf("%d",&x); if (x != 0) Push(S,x); } while(x != 0); //nhap 0 de ket thuc } void Output(Stack S) { Node *P = S.Top; while (P != NULL) { printf("%d ",P->Data); P = P->Next; } printf("\n"); } int main() { Stack S; Init(S); Input(S); Output(S); int lua_chon; printf("Moi ban chon phep toan voi DS LKD:"); printf("\n1: Kiem tra Stack rong"); printf("\n2: Do dai Stack"); printf("\n3: Them phan tu vao Stack"); printf("\n4: Xoa phan tu trong Stack"); printf("\n5: Xuat Stack"); printf("\n6: Thoat"); do { printf("\nBan chon: "); scanf("%d",&lua_chon); switch (lua_chon) { case 1: { if (Isempty(S)) printf("Stack rong !"); else printf ("Stack khong rong !"); break; } case 2: { printf("Do dai Stack: %d",Len(S)); break; } case 3: { item x; printf ("Nhap phan tu can chen vao DS: "); scanf("%d",&x); Push(S,x); break; } case 4: { Pop(S); break; } case 5: { Output(S); break; } case 6: break; } }while (lua_chon !=6); return 0; }
3. スタックを使用すると、C言語で利用可能です
C では、この方法を構築しています (顎) スタックに関連する, それだけで宣言して使用される
#include <iostream> // io #include <stack> // use stack using namespace std; int main() { stack <int> S; // khai bao Stack voi kieu du lieu la int for (int i = 0; i < 10; i++) { S.push(i*78 + 26); // chen cac phan tu vao stack } cout << "Do dai stack: " << S.size() << "\n"; // xuat tat ca phan tu trong stack while (!S.empty()) { // trong khi stack chua trong int x = S.top(); // lay gia tri top S.pop(); // loai bo khoi stack cout << x << " "; } cout << "\n"; return 0; }
4. スタックの用途の例
スタックは、多くの用途を有している, 以下の通りである 1 の変換の応用. 次のコードは、ベースを転送します 10 ベースのxキーボード入力に
#include <iostream> // io #include <stack> // use stack using namespace std; int main() { char num[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; stack <char> S; // khai bao Stack voi kieu du lieu la int int coSo, so, du; cout << "Nhap so can chuyen: "; cin >> so; cout << "Nhap co so can chuyen: "; cin >> coSo; // chuyen doi bang cach dua vao Stack while(so) { du = so % coSo; S.push(num[du]); so /= coSo; } // Xuat ra while(!S.empty()) { cout << S.top(); S.pop(); } return 0; }
[ポストをRPS-含ま=”2703″ ショートコード=”偽”]
こんにちはnguyenvanquan7826,
あなたのおかげで、あなたの恐れを説明し、なぜこのような関数であります:
空洞のInit (スタック &S)
int型のポップ(スタック &S)
空洞プッシュ(スタック &S, 項目X)
アドレスを取得するためのオペレータ “&”.
また、として機能:
int型のisEmpty(スタックS)
int型Isfull(スタックS)
int型のピーク(スタックS)
オペレータではありません “&”
ありがとう.
オペレータ & 単純に変更することができる変数、エスケープ関数に言います. コンテンツは必要としない分を変更していない場合.
彼女の小さな質問, なぜ使用します
—–
のtypedef int型のアイテム;
構造体スタック
{
int型トップ;
アイテムデータ[マックス];
};
—–
なぜ使用しません:
—–
構造体スタック
{
int型トップ;
intData[マックス];
};
—–
どのような効果のtypedef?
これは、データ型を定義するために使用され. その使いやすいアイテム. たとえば、今、あなたは、あなたのデータ型がint型である必要, しかし、いつかはフロートに移動したいです, または 1 構造体, 一方、補正が大きくなります, この定義は、私はここだけで編集します.
さらに良いことに、それはより多くのインポートする機能や輸出品目を構築する必要があります, 正しいデータ型はもう関係ありませんどのようにこのような問題, 廃止修復が完了し、単純に入力してください.
Eの強制が行われますが、その後自身が一番上にK、削除データを採取し、それはトップを返すことがありti.caiデータ機能を尋ねました(S.data[停止]) なぜ戻ります(S.data[S.top-1]) .彼はそれがないとアウトからe説明しました?
それが配列であります. 部分は、あなたが0-> N-1からのものです. したがって、最初のスタックで (配列の最後の1、すなわち) た [トップ1]
この質問を再度ヘルプE NHE: このi.vay目的の値にかかわらず挿入された要素の値は、EHのGIを行うには、ループを使用することです?a giải thích giúp e với .e không hiểu 🙁
のために (int型のi = 0; で < 10; 私 ) {
S.push(私は78 * + 26); // スタックに要素を挿入します
}
すなわち、あなたのためにランダムに値.
電子hoi.vi例Eの力は持っています 1 DS : 2 3 4 5 6 7 8
E番目の要素を入れて 3 di.thi電子印刷DSはそれが理解します: 2 3 20 5 6 7 8
なぜそれがむしろ二次的な要素であります 3 a.cach他の州か他の値???
だから、あなただけでは間違ったコードです.
ここで、E EAの削除機能n番目の要素は、先生のヘルプを参照してくださいされています:
空洞pop_n(スタック* S,int型のn)
{
int型= 1;
stackNode * P = S->トップ;
stackNode *の一時;
int型メートル;
もし(N>のみ(S))
{
リターン;
}
ほかに
{
同時に(demtop = S->上->次;
無料で(P);
リターン;
}
もし(== n個)
{
温度= P->次;
無料で(P);
リターン;
}
温度= P;
P = P->次;
++;
}
}
リターン;
}
彼らはあなたのdemtopあるかわからないものを?
あなたが学習を参照するために、そのスタック上での標準的なCコードで書かれていることは、Aではありません.
あなたの記事グエン・ヴァン・クアンは、DC尾の実装の.cppを保存 , chứ đuôi .C thi ko chạy dc 🙁 . 私は、標準のCを学ぶことでした. ヒックス
eまでs.topとS-を尋ねます>何も別のトップA???
sがある場合s.topが使用され 1 通常の構造体
S->トップは、ときに、カーソルの構造に使用され.
ctrinh私の友人は彼のベーススターKの実行小型DCを変更,C言語で書かれたコードとの対自分をk個
あなたは上記のコードを使用する場合は、* .cppファイルとしてファイルを保存
そして、あなたは、Cのコードを持っていません. 🙂 Bạn dựa vào stack đã xây dựng để code cũng được mà.
先生, C、方法Aで二重にリンクされたリストに保存されたスタック?
私は行っていないもの, また、誰もが二重結合のDSとスタックしない見たことがありません. あなたはより多くのNHEのためのすべての二重リンクリストを見つけることができます. https://www.cachhoc.net/2014/12/21/lap-trinh-c-bai-14-danh-sach-lien-ket-kep/
スターは、トップの座値で開催されました :
int型のピーク(スタックS) //スタックO DAU TUのファンティエットを置きますがクリアされません
{
S.Dataを返します[S.Top-1]; //デュ代わりTAIトップを置き
}
int型のポップ(スタック &S) //分子量除去スタック
{
もし (!isEmpty(S))
{
停止 –; //ギアムトップ
S.Dataを返します[停止]; //デュ代わりTAIトップを置き
}
}
なぜ時間がs.dataです[停止] 時にはそれがs.dataです[s.top-1]
二THについて 2 トップでした– 次に、あなたが行きます
sao mình làm tương tự demo nhưng kết quả ra sai ý nhỉ. lúc nào kiểm tra thì stack cũng “ホロー” と “không đầy”.
mặc dù mình cho max =3 nhập vào 3 thì phải đầy chứ. bạn admin có cho code chạy test thử từng phần chưa vậy. bạn xem lãi hộ mình nhe ;で
Bạn cố gắng kiểm tra lại từng bước xem nhé. Có thể lỗi ở phần nào đó. Code của mình chạy ổn rồi bạn có thể test thử code 🙂
ようこそ、. Bạn ơi bạn có thể thêm hàm Peek. Tức là viết chương trình con lấy nội dung của phần tử tại đỉnh của Stack được không ạ?
Mình có thấy bạn có viết hàm Peak nhưng sao chưa thấy sử dụng nó vậy bạn nhỉ?
書き込みはあります 1 問題, 記事全文はまた別の話ではないで使用することができます. 私は十分にあなたが使用できるように書いておきます.
Mình có rồi đó bạn.
コードについて意見.
1/構造体スタック{…. どこのtypedef必要はありません
2/ピークレベルは、空のスタックを使用するかどうかをチェックする必要があります
3/それが何かを返す空のポップスタック機能ミス, あなたはを通してこのケースをカバーしていません
フィードバックをいただきありがとうございます.
それはどこでもあなたが書かなければならないのtypedefなし “構造体スタック” typedefを使用した場合であっても (定義します 1 データ型) 以下の構造体を引き付けるべきではありません
– 2 ピーク機能は、あなたが言う権利としてそれをポップ. 私は再び編集します.
typedefは構造体スタック
{
ノード*トップ;
};
私はこのために彼に尋ねた何かの先生を宣言することです
どのように構造体宣言ダイヤモンド禁止, いやコSTRUC 1 コンTROトップKIE注意.
彼は私に尋ねた、なぜ、このInit関数の宣言 (スタック &S) スタックを宣言します &機能のisEmptyを宣言する場合でも、S(スタックS) スタックS A宣言する
ときにそこに & その後、関数Sのうち、変更後の値を保持します. そして、いや & その機能の前と後の値は変更されません
#12H20m 10/6/2016
今日の受験, スタックに会いました
DCを行います…. しかし、エラーが出力されます. スタックの性質上、正しく出力されていないとしても有用…
教師逮捕出力、ポップ機能を使用します(), ダウンにブラウズする必要はありません。.
その後、ブラウズ画面を書きます().
後であなたのためのコードレビューを修正するために彼を期待.
削除したいです 1 コードNTN先生スタック内の任意のデータ??
あなたは、ここにしてください見ます
https://www.google.com.vn/search?q=delete+item+from+stack&oq=delete+item+stack&aqs=chrome.1.69i57j0.8935j0j4&client=ms-android-samsung&sourceid=chrome-mobile&ie=UTF-8#xxri=0
私はなぜリストアプリケーションを実行する尋ねられたとき、あなたはセグメントをリンクすることができため、英国陸軍
typedefのノード*リスト; //リストには、ノードのリストです。
また、スタックに、何もありません, 本質スタックだけでなく、リンクのリストにあるものの
これは、この時期にあったNHE
typedefは構造体スタック
{
ノード*トップ;
};
カーソルにインストールされているスタックで, ポップ関数Eにヒープ上のポインタを割り当てるときに、カーソルの記憶がまだプログラム全体に存在するようにので、あなたは、スタックの最上位ノードを削除すべきだと思います, アプリケーションがオーバーフロースタックをスタックに弱いときノード行くを削除しない場合
ああF Eのためにユーザーがコードを尋ねます::ブロック . しかし、電子の= cは、このような参照先生を使用していないプログラムを実行する理由. ecasmのおかげで
それを取得しないでください, どのようにあなたがあまりにも一般的な頼みます.
B CでNO参照ありません, コード::ブロックは実行されません右です, DEVC実行があるためC ++コンパイラBLAのBLAです。. (このセクションでは、どのようメートルキロバイト説明します)
カーソルメニューによって作成されたリンクの非常に類似したリストを作成したE尋ねたスタック・ポインタはそうではありません
私はあなたがint型のisEmpty isfull機能を尋ねるが、リターンがあります 1 句は、返された結果がどのようにAであり?
その価値提案があります 1 または 0 あなたNHE. VD Lの==のNULL、価値があるだろう 1 trueの場合, 0 間違っている場合.
尋ねた電子の広告:
押す(): DLを追加します
ピーク(): dlでありませんが削除されます
ポップ(): 削除し、DLを取ります
“dlでありませんが削除されます” その後、eはポップに応えるために、合理的な表示されます() 後. ポップでそう() 持っている”消す” それが終了します, やはり “DLを取ります” その先生の他に何を行うには?
最愛の人は離れて自分の位置kを削除するには、より多くの機能を追加しました
そのNHEを持っていないスタック. 必要な場合は、自分自身に考えました.
DS特別Input_stackによる書き込み機能. 鋸方法