编程C本: 帖子 12 – 在阵列设置链接列表
内容
可以安装在阵列或指针链接列表. 在本文中,我将向你展示如何使用数组 :), 键入这个名单通常被称为下一个列表.
1. 设置 (报告) 名单
宣布这份名单,我们应该有 1 阵列元件的最大数N的数据类型是项 (这是数据项的概述的类型, 什么时候会是int, 结构类型float或学生). 需要更多 1 可变大小表示现有的列表元素的数量.
具体地讲,下面的:
1 2 3 4 5 6 7 8 9 | #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 是.
1 2 3 4 5 6 | 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或不 (满).
1 2 3 4 5 6 7 8 9 | int Isempty (List L) { return (L.size==0); } int Isfull (List L) { return (L.size==N); } |
4. 插入元素到列表中的位置k
在列表中插入元素,我们应该建立 1 函数返回的数据 (输入数据) 元素,将其插入.
1 2 3 4 5 6 | 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 单元.

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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. 进入列表
输入照常阵列
01 02 03 04 05 06 07 08 09 10 11 12 | 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的值被定其位置.
1 2 3 4 5 6 7 8 | 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 单元.

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 | 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删除,我们找到位置的元素.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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. 完整的程序 (满)
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 | #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和毕竟它删除