01/10/2018, 00:48
Ký hiệu -> trong C để làm gì?
Mình đang học đến phần danh sách liên kết đơn, thì thấy cái ký hiệu -> liệu nó có tương ứng với dấu . ko? kiểu như lấy 1 thuộc tính của một đối tượng đó ?
cho mình hỏi thêm làm thế nào để in ra các phần tử trong danh sách liên kết đơn vậy ?
#include <stdio.h>
struct node {
int item;
struct node *next;
};
typedef struct node *listnode;
void Insert_Begin(listnode *p, int x){
listnode q;
q = (listnode)malloc(sizeof(struct node));
q->item=x;
q->next=*p;
*p=q;
}
void Insert_End(listnode *p, int x){
listnode q,r;
q = (listnode)malloc(sizeof(struct node));
q->item = x;
q->next = NULL;
if(*p==NULL) *p=q;
else{
r = *p;
while (r->next != NULL) {
r=r->next;
}
r->next=q;
}
}
void Insert_Middle(listnode *p,int position, int x){
int count = 1, found=0;
listnode q,r;
r=*p;
while((r!=NULL)&& (found==0)){
if(count == position){
q=(listnode)malloc(sizeof(struct node));
q->item=x;
q->next=r->next;
r->next=q;
found=1;
}
count++;
r=r->next;
}
if(found==0)
printf("Khong tim thay vi tri can chen.");
}
void Remove_Begin(listnode *p){
listnode q;
if(*p==NULL) return;
q=*p;
*p=(*p)->next;
q->next=NULL;
free(q);
}
void Remove_End(listnode *p){
listnode q,r;
if(*p==NULL) return;
if((*p)->next == NULL){
Remove_Begin(*p);
return;
}
r=*p;
while(r->next==NULL){
q=r;
r=r->next;
}
q->next=NULL;
free(r);
}
void Remove_Middle(listnode *p,int position){
int count =1,found=0;
listnode q,r;
r=*p;
while ((r !=NULL)&&(found==0)){
if(count == position){
q = r->next;
r->next=q->next;
q->next=NULL;
free(q);
found=1;
}
count++;
r=r->next;
}
if(found==0){
printf("Khong tim thay vi tri can xoa.");
}
}
int main(){
printf("Tao ra mot danh sach:");
listnode p;
p=NULL;
Insert_Begin(&p,4);
listnode r;
r=p;
while(r->next != NULL){
printf("%d",*(r.item));
r=r->next;
}
}
Bài liên quan
Nó có tương đương nhé. Nhưng chỉ dùng cho pointer thôi nhé. Em nên học kỹ hơn về phần pointer nhé. C/C++ nó quan trọng lắm đấy
e đọc sách phần pointer ko có nói đến a à, nó tương đương vậy mh có thể thay thế dc ko với cho e hỏi sao e in ra các phần tử trong danh sách lkd lại ko dc ?
Code này anh chạy thử thấy sai sai. Không biết em có chạy được không chứ anh build là bị lỗi rồi @@!
Cái này anh thử sửa lại 1 chút. Chủ yếu ở hàm main. Còn về việc thay thế -> thì không thay được nhé.
ngon nhưng sao nó in thiếu 1 phần tử vậy a ?, e sửa thành do while vẫn thiếu ?
Đủ cả mà nhỉ @@!
sao e bi thieu nhi po tay @@
Thấy code của anh không? Dòng 107 ý (Xem ảnh ý) =))~ thì biết tại sao ngay.
à cái cuối cùng nó trỏ tới null
Bạn có thể thay thế
Ví dụ
r ->pNext; <=> (*r).pNext;
b đọc ở đâu vậy có thể chia sẻ cho t vs dc ko? t muốn đọc thêm
Cái này là kiến thức căn bản về pointer thôi mà Bạn ^^
Bạn có thể tìm đọc quyển Kỹ Thuật Lập Trình của Đại học KHTN về phần pointer này nói khá kỹ và chi tiết.
uk thì mh mất căn bản, b có thể cho t link tải online ko t tìm thấy mỗi kỹ thuật lập trình dhkhtn hcm nhưng ko nói đến phần này
Này chỉ có sách thôi, không có bản online đâu Bạn ^^
mình ko nhớ rõ lắm chức năng thì ko khác lắm còn về cách sử dụng thì trong 1 số trường hợp thì dung . ko đc mà phải dùng -> . Cụ thể th như thế nào thì mình ko nhớ đc ^^!
nó kiểu trỏ tới, giống như bạn vẽ ra giấy dslk sẽ dễ hiểu hơn… kiểu như vậy