编程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 单元
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,
感谢你解释你的恐惧就是为什么这样的功能:
无效初始化 (堆 &S)
INT流行(堆 &S)
空推(堆 &S, X项)
操作员得到一个地址 “&”.
还充当:
INT的IsEmpty(叠层S)
INT Isfull(叠层S)
INT峰(叠层S)
不是操作者 “&”
谢谢.
操作者 & 简单的说就是逃生功能,变量可以改变. 如果内容不改变分钟不需要.
她的小问题, 为什么要使用
—–
的typedef INT项目;
结构栈
{
INT顶部;
项目数据[马克斯];
};
—–
为什么不使用:
—–
结构栈
{
INT顶部;
intData[马克斯];
};
—–
什么样的影响的typedef?
它被用来定义一个数据类型. 其易于使用的项目. 例如,现在你希望自己的数据类型为int, 但是有一天要移动浮, 或 1 结构, 同时校正将极大地, 这个定义,我只是编辑这边独.
更妙的是,它应该建立更多的功能,导入和导出项目, 这样的事情怎么样正确的数据类型是不相关了, 只需输入停产检修完毕.
为电子警队问ti.cai数据功能发生,但当时自己取钾养分顶部删除数据,它必须返回顶部(S.data[停止]) 为什么返回(S.data[S.top-1]) .他解释到电子用是吧?
它是该阵列. 部分是从0-> n-1个你. 因此,首先在堆栈 (即最后一个阵列中) 是 [顶1]
再此问题上帮助电子商务NHE: 的这个i.vay目的的值的插入而与元素的值是使用循环做诶GI?a giải thích giúp e với .e không hiểu 🙁
为 (INT I = 0; 在 < 10; 我 ) {
S.push(I * 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ñ)
{
INT = 1的;
stackNode * P = S->顶;
stackNode *温度;
INT米;
如果(ñ>只(s))
{
回报;
}
其他
{
而(demtop = S->最佳->下一个;
免费(P);
回报;
}
如果(在==Ñ)
{
TEMP = P->下一个;
免费(P);
回报;
}
温度= P;
P = P->下一个;
该++;
}
}
回报;
}
他们不知道什么是什么你demtop?
你写在标准C代码的堆栈指学习不是一种.
您的文章阮文权豁免DC尾实现的.cpp , chứ đuôi .C thi ko chạy dc 🙁 . 我是学习标准C. HIX
A至E问s.top和S->没有什么不同的顶部???
s.top用于当s是 1 结构正常
S->顶时使用光标S结构.
ctrinh我的朋友改变自己的基本的星K运行小DC,与代码写在C k的自己VS
如果你使用上面的代码,然后将文件保存为*的.cpp
而你没有在C代码. 🙂 Bạn dựa vào stack đã xây dựng để code cũng được mà.
老师, 堆栈存储在双向链表在C中,如何将?
我还没有这样做的事情, 还从来没有见过任何人不要堆放的双键DS. 你可以找到所有双向链表的更多NHE. https://www.cachhoc.net/2014/12/21/lap-trinh-c-bai-14-danh-sach-lien-ket-kep/
星发生在榜首值 :
INT峰(叠层S) //莱堆栈ØDAU土藩,但不清除
{
返回S.Data[S.Top-1]; //莱杜代替泰顶
}
INT流行(堆 &S) //分子量清除栈
{
如果 (!是空的(S))
{
停止 –; //Giam顶部
返回S.Data[停止]; //莱杜代替泰顶
}
}
为什么时间是s.data[停止] 有时它是s.data[s.top-1]
用于第二TH 2 是热门– 然后你去
为什么我做同样的演示,但结果出来后对错. 经常检查堆栈还 “空洞” 和 “未满”.
虽然她的输入最大= 3 3 相反,他们必须完成. 管理员必须运行有没有测试代码的测试部分. 你看他们的家庭率呲 ;在
你尝试检查背影渐渐看到NHE. 也许有些错误. Code của mình chạy ổn rồi bạn có thể test thử code 🙂
欢迎. 我的朋友,你可以添加内容窥视. 即写入子程序采取位于堆栈顶部的元素的内容是不是?
我已经看到了你写的函数峰值,但星星,你看到反正用它?
写作是 1 事, 全文可在不使用则是另一回事. 我一直在写,让你使用只够.
而且,你自己有.
他对代码注释.
1/蔡结构栈{…. 当不需要的typedef
2/峰值水平还需要检查是否使用空堆栈
3/怀念流行的功能堆栈是空的,它返回的东西, 你不包括在这种情况下,
感谢您的反馈.
如果没有的typedef它无处不在,你必须写 “结构栈” 使用的typedef,即使 (确定 1 数据类型) 不应该引起下面的结构
– 2 峰值功能和流行是正确的,你说的. 我将修改.
typedef结构栈
{
节点*顶部;
};
他问我是什么什么,先生声明
结构声明钻石如何禁令, 这STRUC 1 CON卓祺顶注.
他问我为什么这个函数声明初始化 (堆 &S) 声明堆栈 &件更声明函数的IsEmpty时(叠层S) 声明堆栈S A
一旦有 & 再出函数S将保留更改后的价值. 而且没有 & 前和后的功能,它的值不发生变化
#12h20m 10/6/2016
Hôm nay đi thi về, gặp Stack
làm đc…. nhưng bị lỗi là output. output viết như trên ko đúng bản chất của stack…
Thầy bắt output thì dùng hàm pop(), ko phải duyệt trên xuống.
Duyệt thế thì viết Display().
希望他以后再修改代码审查你.
要删除 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中的用户请求的代码::块 . 但为什么E = C键运行程序不使用这样的参考先生. ecasm谢谢
不明白这一点, 如何你问太笼统.
在C,其中B无参考, 代码::块不运行是正确的, DEVC运行是因为C ++编译器喇嘛喇嘛。. (本节介绍如何米KB)
随着光标菜单创建的链接非常相似的列表中创建Ë问堆栈指针是不是
我问你是INT的isEmpty isfull功能,但回报是 1 子句,返回的结果是怎样一个?
这价值主张 1 或 0 你NHE. VD大号== NULL,就不会有值 1 如果属实, 0 如果错了.
广告为电子商务问:
推(): 添加DL
窥视(): d1和不被删除
流行的(): 删除并采取DL
“d1和不被删除” 然后e出现在合理迎合流行() 后来. 因此,在流行() 有”抹去” 它完成, 还 “走升” 还有什么做先生?
亲爱的增加了更多的功能进行删除位置k了他
堆栈没有那个NHE. 你想过给自己,如果有必要.
通过DS特殊Input_stack写功能. 并看到了如何