@chawuciren
        
        2018-10-12T13:36:38.000000Z
        字数 2782
        阅读 665
    链表结构体
未分类
#include<stdio.h>/* 结构体第一种定义 */struct Student1{int id;int score;};/* 结构体第二种定义 */typedef struct asdasd{int id;int score;} Student2;int main(void){/* 注意两种声明的区别 */struct Student1 s1;Student2 s2;s1.id = 2018022628;s1.score = 100;s2.id = 2018022629;s2.score = 59;printf("ID:%d, Score:%d\n", s1.id, s1.score);printf("ID:%d, Score:%d\n", s2.id, s2.score);/* 结构体的地址 */printf("%p\n", &s1);printf("%p\n", &(s1.id));printf("%p\n", &s2);printf("\n\n");/* 结构体指针 */struct Student1* ss1 = &s1;Student2* ss2 = &s2;;/* ss2 = &s1; 报错!虽然Student1和Student2的内部定义是一样的,但它们仍然是不同的结构 */printf("%p\n", ss1);printf("%p\n", ss2);/* 用指针的方式访问结构体的内容 */printf("ID:%d, Score:%d\n", ss1->id, ss1->score);printf("ID:%d, Score:%d\n", ss2->id, ss2->score);/* 用指针解引用的方式访问结构体的内容 */printf("ID:%d, Score:%d\n", (*ss1).id, (*ss1).score);printf("ID:%d, Score:%d\n", (*ss2).id, (*ss2).score);return 1;}
#include<stdio.h>typedef struct _node{int data;struct _node* nextnode; /* 觉得奇怪?先记着*//* Wrong! node* nextnode2; */} node;int main(void){node n1;node n2;n1.data = 123123;n1.nextnode = NULL;n2.data = 456456;n2.nextnode = NULL;printf("%d\n", n1.data);printf("%d\n", n2.data);printf("\n");/* n1中的nextnode指针指向n2, n2中的nextnode指向n1 */n1.nextnode = &n2;n2.nextnode = &n1;printf("%d\n", (n1.nextnode)->data);printf("%d\n", (n2.nextnode)->data);return 0;}
#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct {int data1;int data2;} Node;int main(void){/* 分配结构体动态数组 */int len = 10;Node* arrayOfNode = (Node*)malloc( sizeof(Node) * len);for(int i = 0; i < len; i++){arrayOfNode[i].data1 = i;(arrayOfNode+i)->data2 = 2*i;}for(int i = 0; i < len; i++){printf("%d\n", (arrayOfNode+i)->data1);printf("%d\n\n", arrayOfNode[i].data2);}/* 动态数组需要释放内存 */free(arrayOfNode);return 1;}
/**************链表定义示例链表遍历*************/#include<stdio.h>#include<stdlib.h>typedef struct _LinkedList{int data;struct _LinkedList* nextnode;} LinkedList;int main(void){int len = 10;LinkedList* head = NULL; /* 注意该定义与LinkedList head的区别! *//* printf("%d\n",head->data); */LinkedList* temp = NULL;LinkedList* newNode = NULL;/* head = (LinkedList*)malloc( sizeof(LinkedList) ); 分配一个结点的空间,然后让head指向它 *//* temp = head; 此时temp 和 head 指向同一个地方!*//* 建立一个有10个结点的链表 */for(int i = 0; i < 10; i++){ /* 已经分配了一个head结点,接下来只需要分配10个结点即可 */newNode = (LinkedList*)malloc( sizeof(LinkedList) ); /* 分配一个结点的空间,然后让newNode指向它 */newNode->data = i;newNode->nextnode = NULL;if( i == 0 ){/* 保存好头结点 */head = newNode;temp = head;}temp->nextnode = newNode; /* 使temp的下一个结点为newNode,即往链表尾部插入一个结点 */temp = newNode; /* temp始终指向链表尾端的结点 */}/* 此时构造了一个有10个结点的链表!该链表的头结点由head指向 *//* 遍历链表内容 */temp = head;for(int i = 0; i < 10; i++){ /*10个结点*/printf("%d->",temp->data);temp = temp->nextnode; //往后移}printf("\n\n");/* 另外一种遍历方法!建议以后链表就这样遍历 */temp = head;while( temp != NULL ){printf("%d->", temp->data);temp = temp->nextnode;}printf("\n\n");/* 链表结点在内存中的位置不是连续的! */temp = head;while( temp != NULL ){printf("%p->", temp);temp = temp->nextnode;}/* 释放链表所占用内存 */LinkedList* temp2;temp = head;while( temp != NULL ){temp2 = temp->nextnode;free(temp);temp = temp2;}return 0;}
在此输入正文