编程C本: 帖子 12 – 在阵列设置链接列表
内容
可以安装在阵列或指针链接列表. 在本文中,我将向你展示如何使用数组 :), 键入这个名单通常被称为下一个列表.
1. 设置 (报告) 名单
宣布这份名单,我们应该有 1 阵列元件的最大数N的数据类型是项 (这是数据项的概述的类型, 什么时候会是int, 结构类型float或学生). 需要更多 1 可变大小表示现有的列表元素的数量.
具体地讲,下面的:
#define N 100 //so phan tu toi da la 100 typedef int item; /*kieu cac phan tu la item ma cu the o day item la kieu int */ typedef struct { item Elems[N]; //mang kieu item int size; //so phan tu toi da cua mang }List; //kieu danh sach List
2. 初始化空单
我们的列表为空时,元素的列表中的数 0. 所以只需要声明一个在大小 0 是.
void Init(List *L) //ham khoi tao danh sach rong /*Danh sach L duoc khai bao kieu con tro de khi ra khoi ham no co the thay doi duoc*/ { (*L).size = 0; //size = 0. }
3. 检查列表是空的, 完整列表
检查该列表为空或满的列表的元素仅仅由它的外表 0 或不 (空洞) 并通过N或不 (满).
int Isempty (List L) { return (L.size==0); } int Isfull (List L) { return (L.size==N); }
4. 插入元素到列表中的位置k
在列表中插入元素,我们应该建立 1 函数返回的数据 (输入数据) 元素,将其插入.
item init_x() //khoi tao gia tri x { int temp; scanf("%d",&temp); return temp; }
然后进行插入:
在插入过程中,我们需要检查,如果列表已满, 输入位置K可插入和检查, 如果合适的话 (0<到<N =) 将继续进行插入.
插入元素x在列表位置k (阵列中) 我们需要 1 循环到从位置k个元素朝着阵列的端, 然后将X的位置k. 最后,我们增加了大小 1 单元.
int Insert_k (List *L, item x, int k)//chen x vao vi tri k { if (Isfull(*L)) //kiem tra danh sach day { printf("Danh sach day !"); return 0; } if (k<1 || k>(*L).size+1) //kiem tra dieu kien vi tri chen { printf("Vi tri chen khong hop le !\n"); return 0; } printf ("Nhap thong tin: "); x = init_x(); //gan x = ham khoi tao x int i; //di chuyen cac phan tu ve cuoi danh sach for (i = (*L).size; i >= k; i--) (*L).Elems[i] = (*L).Elems[i-1]; (*L).Elems[k-1]=x;//chen x vao vi tri k (*L).size++;//tang size len 1 don vi. return 1; }
5. 进入列表
输入照常阵列
void Input (List *L) { int n; printf("Nhap so phan tu cua danh sach: "); scanf("%d",&(*L).size); int i; for (i=0; i<(*L).size; i++) { printf("Nhap phan tu thu %d : ",i+1); (*L).Elems[i] = init_x(); } }
6. 查找元素x的列表
我在列表的末尾浏览如果x的值被定其位置.
int Search (List L, item x) { int i; for (i=0; i<L.size; i++) if (L.Elems[i] == x) return i+1; return 0; }
7. 在列表中清除第k个元素
删除一个必须检查前列表是空的. 如果不空到位拆卸和检查 (适当如果0<到<N =).
我们用一个for循环运行到位置K, 然后把元件从以前的K 1 1 单元. 但是,我们需要保存删除隐瞒信息之前删除的元素的值,如果我们需要使用它. 最后,将尺寸减小的向下 1 单元.
int Del_k (List *L, item *x, int k) { if (Isempty(*L)) { printf("Danh sach rong !"); return 0; } if (k<1 || k>(*L).size) { printf("Vi tri xoa khong hop le !"); return 0; } *x=(*L).Elems[k-1]; //luu lai gia tri cua phan tu can xoa int i; for (i=k-1; i<(*L).size-1; i++) //don cac phan tu ve truoc (*L).Elems[i]=(*L).Elems[i+1]; (*L).size--; //giam size return 1; }
8. 在列表中删除元素含量x
要删除元素含量x在列表中,我们发现使用搜索功能之前,进行元素X,然后返回x位置值, 我继续使用功能del_k删除,我们找到位置的元素.
int Del_x (List *L, item x) { if (Isempty(*L)) { printf("Danh sach rong !"); return 0; } int i = Search(*L,x); if (!i) { printf("Danh sach khong co %d",x); return 0; } do { Del_k(L,&x,i); i = Search(*L,x); } while (i); return 1; }
9. 完整的程序 (满)
#include<stdio.h> #include<stdlib.h> #define N 100 //so phan tu toi da la 100 typedef int item; /*kieu cac phan tu la item ma cu the o day item la kieu int */ typedef struct { item Elems[N]; //mang kieu item int size; //so phan tu toi da cua mang }List; //kieu danh sach List void Init(List *L); //ham khoi tao danh sach rong void Init(List *L); //ham khoi tao danh sach rong int Isempty (List L); //kiem tra danh sach rong int Isfull (List L); //kiem tra danh sach day int Insert_k (List *L, item x, int k); //chen x vao vi tri k void Input (List *L);//nhap danh sach void Output (List L);//xuat danh sach int Search (List L, item x); //tim phan tu x trong danh sach int Del_k (List *L, item *x, int k);//xoa phan tu tai vi tri k int Del_x(List *L, item x);//xoa phan tu x trong danh sach item init_x(); //tao phan tu x. //----------------------------------- void Init(List *L) //ham khoi tao danh sach rong /*Danh sach L duoc khai bao kieu con tro de khi ra khoi ham no co the thay doi duoc*/ { (*L).size = 0; //size = 0. } int Isempty (List L) { return (L.size==0); } int Isfull (List L) { return (L.size==N); } item init_x() //khoi tao gia tri x { int temp; scanf("%d",&temp); return temp; } int Insert_k (List *L, item x, int k)//chen x vao vi tri k { if (Isfull(*L)) //kiem tra danh sach day { printf("Danh sach day !"); return 0; } if (k<1 || k>(*L).size+1) //kiem tra dieu kien vi tri chen { printf("Vi tri chen khong hop le !\n"); return 0; } printf ("Nhap thong tin: "); x = init_x(); //gan x = ham khoi tao x int i; //di chuyen cac phan tu ve cuoi danh sach for (i = (*L).size; i >= k; i--) (*L).Elems[i] = (*L).Elems[i-1]; (*L).Elems[k-1]=x;//chen x vao vi tri k (*L).size++;//tang size len 1 don vi. return 1; } void Input (List *L) { int n; printf("Nhap so phan tu cua danh sach: "); scanf("%d",&(*L).size); int i; for (i=0; i<(*L).size; i++) { printf("Nhap phan tu thu %d : ",i+1); (*L).Elems[i] = init_x(); } } void Output (List L) { printf("Danh sach: \n"); int i; for (i=0; i<L.size; i++) printf("%5d",L.Elems[i]); printf("\n"); } int Search (List L, item x) { int i; for (i=0; i<L.size; i++) if (L.Elems[i] == x) return i+1; return 0; } int Del_k (List *L, item *x, int k) { if (Isempty(*L)) { printf("Danh sach rong !"); return 0; } if (k<1 || k>(*L).size) { printf("Vi tri xoa khong hop le !"); return 0; } *x=(*L).Elems[k-1]; //luu lai gia tri cua phan tu can xoa int i; for (i=k-1; i<(*L).size-1; i++) //don cac phan tu ve truoc (*L).Elems[i]=(*L).Elems[i+1]; (*L).size--; //giam size return 1; } int Del_x (List *L, item x) { if (Isempty(*L)) { printf("Danh sach rong !"); return 0; } int i = Search(*L,x); if (!i) { printf("Danh sach khong co %d",x); return 0; } do { Del_k(L,&x,i); i = Search(*L,x); } while (i); return 1; } int main() { List L; Init(&L); Input(&L); Output(L); int lua_chon; printf("Moi ban chon phep toan voi DS LKD:"); printf("\n1: Kiem tra DS rong"); printf("\n2: Do dai DS"); printf("\n3: Chen phan tu x vao vi tri k trong DS"); printf("\n4: Tim mot phan tu trong DS"); printf("\n5: Xoa phan tu tai vi tri k"); printf("\n6: XOa phan tu x trong DS"); printf("\n7: Thoat"); do { printf("\nBan chon: "); scanf("%d",&lua_chon); switch (lua_chon) { case 1: { if (Isempty(L)) printf("DS rong !"); else printf ("DS khong rong !"); break; } case 2: printf ("Do dai DS la: %d.",L.size);break; case 3: { item x; int k; printf ("Nhap vi tri can chen: "); scanf ("%d",&k); if (Insert_k(&L,x,k)) { printf ("DS sau khi chen:\n"); //xuat danh sach sau khi chen Output(L); } break; } case 4: { item x; printf ("Moi ban nhap vao phan tu can tim: "); scanf("%d",&x); int k=Search(L,x); if (k) printf ("Tim thay %d trong DS tai vi tri thu: %d",x,k); else printf ("Khong tim thay %d trong danh sach !",x); break; } case 5: { int k; item x; printf ("Nhap vi tri can xoa: "); scanf ("%d",&k); if (Del_k (&L,&x,k)) { printf ("DS sau khi xoa:\n"); Output(L); } break; } case 6: { item x; printf ("Nhap phan tu can xoa: "); scanf ("%d",&x); if (Del_x(&L,x)) { printf ("DS sau khi xoa:\n"); Output(L); } break; } case 7: break; } }while (lua_chon !=7); return 0; }
[RPS-包括交=”2703″ 简码=”假”]
INT lua_chon;
的printf(“邀请您选择与DS LKD操作:”);
的printf(“\N1: 检查DS海藻”);
的printf(“\N2: 做代DS”);
的printf(“\N3: 在DS处陈元值X k”);
的printf(“\N4: 查找DS元素”);
的printf(“\N5: 删除位置k处的元件”);
的printf(“\N6: 删除DS中的元素x”);
的printf(“\N7: 退出”);
网站 N1: \N2: v.v…意味着他的明星. 我看到的地方,如在正常秩序修女. 但把为什么当命令开关…情况下,他们自己可以选择DC,所以他( 比如: 你点击 1 它打印 : 检查DS海藻 . 即使按 2 它打印 : 做代DS , v.v…. 他解释说帮我
这仅仅是只打印菜单, 更长的时间,进入下看哪开关的情况下实现部分…
ct full die rồi a ơi gửi link mới giúp e
Bạn click vào sẽ hiện ra chương trình full nhé.
nhấp nó quay lại trang này ạ. ad giúp e
Bạn xem ở link này nhé: https://ideone.com/rvKBPr
新的孩子学习C和我没有理解太多关于tro.A子为电子的问题是一样的语句 (*L).L.size显著大小或语法是怎样一个,为什么有间点 2 先生变量?我们祝愿他的答案,我感谢他爵士.
点表达的分布式访问组件 1 变量. 例如sinhvien.ten是让你的名字在那里sinhvien看此选手. 你看通过所有类型的结构会更清楚地看到NHE.
https://www.cachhoc.net/2014/12/19/lap-trinh-c-bai-11-kieu-cau-truc-struct/
Ëa.Hy了解hoi.Em祝他身体健康他的期望更新后的网站上,使人们有更多的学习资料,谢谢你回答我的问题.
凸轮上的禁令.
该公司报告该错误是你不执行root帐户应该不会有强制执行权的帐户. 你看到NHE账户.
句法: 如果 (是空的(*L)) ; 如果 (已满(*L)) 是为什么? Ë想法,如果有条件使用, 例如,
如果(是空的(L) == 0) // 要知道,这个列表是空的, 如果有 (已满(L) ==ñ) 有关完整列表.
CA同时(在) Ë没有看到任何多个条件 >, <, !=,…. 我们如何能够理解的是,当循环结束时,?
当检查,我们测试的实质条件 1 声明true或false. 实施例1 == 0是假, 同样的事情IsEmpty函数返回正确的结果,当L为空, 错了,当栈不为空.
更具体的是不 ?
有条件的性质测试,以检查是否真的还是假的, 即true或false, 你写一个== B或比较 1 某些函数返回真也是假的,. 在这种情况下,函数IsEmpty函数为空时返回true, 假的,如果它不是空. 彼时.
的typedef INT项目;
/*侨每项分子
铜项目上的那点INT的一天 */
typedef结构
{
项目elems的[ñ]; //侨带物品
INT大小; //元素的最大数量带来
}名单; //列表样式列表
可能不需要申报: 的typedef INT项目;
马我们宣布直接进入结构总是DK没有广告
typedef结构
{
INT elems的[ñ];
INT大小; //元素的最大数量带来
}名单; //列表样式列表,
为什么记者,因为这lkhai:
的typedef INT项目;
/*侨每项分子
铜项目上的那点INT的一天 */
typedef结构
{
项目elems的[ñ]; //侨带物品
INT大小; //元素的最大数量带来
}名单; //列表样式列表
那么你啊, 但自己更换其他类型时更容易啊,你键入的数据项,.
感谢很多广告
可直接申报. 他的轻松风格之后接替他分开.
cho e hỏi muốn viết sang c++ thì chỉ cần thay print và scanf là cout và cin đúng k ạ
Cũng có thể nói alf thế. 😉
服务员, em dùng VS 2015, khi chạy chương trình hoàn chỉnh thì nó báo lỗi “uninitialized local variable ‘x’ 旧” 在网上 “如果 (Insert…” trong case 3 đó anh, nhưng mình khai báo item x từ đầu case 3 rồi mà, vậy là sao anh ?
仅凭这一点不明确. 烤用户从未VS. 在Linux VS DEV-C全码
一个家庭解释什么如果f (Del_x(&L,X)) 如果计算机在理解如何成为KO先生
Del_x功能被去除在列表L中的x值元素. 它返回的位置找到x和删除X. 如果找到返回位置即> 0. 如果没有找到返回 0.
在C / C ++ 0 是错误的, 其他 0 是正确的. 因此Del_x函数返回true或false.
如果(Del_x()) 也就是说,如果真.
广告, Ë问当E用户的视觉代码,然后在错误张贴广告的主要功能是X初始化, E具有创建的项目X; 或项目* X; 他们不是先生? 为电子爵士旺的广告解决方案, 谢谢了,先生˚F
您分配一个值给它 0 TRC当用户观看DJK KO
是的, 我做DC镭, 非常感谢主席先生nhìu广告
欢迎. 我想添加的数组中的元素正确的,那么如何. 你只是帮助自己与
谢谢
星Isfull功能(列表L) 但是当检查Isfull(*L) ?!?! 他解释说,以e为不 !?? 谢谢 !!!1
因为L当它被传递给函数 1 指针 (INT Insert_k (列表* L,…) 应该用左旋获得光标值. 如果是写地址L指针L
贵重的到E问及为何使用函数指针L以外的功能也搜索没有先生?
他们正在了解指针不应误读, 前锋他解释先生.
谢谢!
搜索函数返回的仅仅是因为它找到了什么, 不改变大号. 当用户想要改变指针L.
我的老师问我,当我移动到C ++代码. 为什么他不使用CIN COUT爵士火腿定义???? Ë的#include鞭先生
使用命名空间std有更多的,如果不写STD::杜松子酒, STD::COUT
哦,让我问映泉
位置k处插入功能元素,如果你需要插入刚过当前数组的最后一个元素,该功能无法使用自己的权利的新元素 ?
有太多
贵重的到E问. “*” 拿到价值, “&” 获取地址. 然后列表L的L星A列表, 一个解释为电子与理解
申报,列表L - > L是类型列表的指针变量.
当声明列表L - >的类型是List的变量.
天堂, 该通道Del_k(L,&X,在);
I =搜索(*L,X);
麻烦在. 星不删除直: Del_k(*L,&X,到) 再加入搜索(L,X), 只是寻找x和毕竟它删除