您的位置:首页 > 理论基础 > 数据结构算法

c语言数据结构的练习

2017-12-18 19:10 337 查看
http://blog.csdn.net/men_wen/article/details/52877331?locationNum=14&fps=1

#include<stdio.h>
#include<stdlib.h>
/*
c语言数据结构的练习
1.单链表
*/

typedef struct node {
int data;    //数据域
struct node *next;    //指针域
}NODE;

//初始化一个节点
NODE* initnode(NODE *pnode, int data)
{
pnode = (NODE *)malloc(sizeof(NODE));
pnode->data = data;//初始化数据域
pnode->next = NULL;//初始化指针域为NULL
return pnode;
}

int main() {
//单链表
struct node *head;
//这里为什么传入指针的地址,注意体会 ,为什么要返回结构体指针
head = initnode(&head, 100);
struct node *first;
first = initnode(&first, 200);
struct node *Second;
Second = initnode(&Second, 300);
head->next = first;
first->next = Second;
printf("%d %d %d",head->data,head->next->data,head->next->next->data);

return 0;
}


======

#include<stdio.h>
#include<stdlib.h>
/*
c语言数据结构的练习
1.单链表
*/

typedef struct node {
int data;    //数据域
struct node *next;    //指针域
}NODE;

//初始化一个节点
NODE* initnode(NODE *pnode, int data)
{
printf("=%d\n",pnode);
pnode = (NODE*)malloc(sizeof(NODE));
pnode->data = data;//初始化数据域
pnode->next = NULL;//初始化指针域为NULL
return pnode;
}
//向链表的结尾添加一个节点
NODE * addToLast(NODE *head,NODE *last)
{
NODE *first = head;
while (first->next != NULL) {
first = first->next;
}
first->next = last;
}
int main() {
///创建头结点
NODE *head = initnode(&head, 100);
printf("=%d\n", head);
////创建第一个子节点
NODE *first = initnode(&first, 200);
//printf("%d", first->data);
NODE *second = initnode(&second, 300);
NODE *three = initnode(&three, 400);
NODE *four = initnode(&four, 500);
NODE *five = initnode(&five, 600);
NODE *t;
NODE *tt;

//添加节点到链表
addToLast(head, first);
addToLast(head, second);
addToLast(head, three);
addToLast(head, four);
addToLast(head, five);

return 0;
}


=====

typedef struct node {
int data;    //数据域
struct node *next;    //指针域
}NODE;
struct {
int a;
char b;
float c;
} x;
int main() {
NODE t1;
t1.data = 100;
printf("%d\n", t1.data);//输出100
NODE t2;
t2.data = 200;
//结构体变量之间的赋值
t2 = t1;
printf("%d\n", t2.data);//输出100

//创建一个结构体指针变量,需要malloc创建空间,才能使用
NODE *s1;

NODE *s2 = (NODE*)malloc(sizeof(NODE));
s2->data = 300;
printf("%d\n", s2->data);//输出300
NODE *s3 = (NODE*)malloc(sizeof(NODE));
s3->data = 400;
printf("%d\n", s3->data);//输出400
////由此可以结构体指针变量的赋值,就是将结构体指针变量存储的地址赋值给另一个变量
s3 = s2;
printf("%d\n", s3->data);//输出300
return 0;
}


===比较标准的结构体初始化===

#include<stdio.h>
#include<stdlib.h>
#include <memory.h>
#define RES_OK      0
#define RES_FAILD   -1

typedef struct node {
int data;    //数据域
struct node *next;    //指针域
}NODE;

//int initnode(NODE **pnode, int data)
//{
//  //printf("=%d\n",pnode);
//  *pnode = (NODE*)malloc(sizeof(NODE));
//  if (!*pnode)
//      return RES_FAILD;
///*
//  void *memset(void *s, char ch, unsigned n);
//  功能:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,
//  这个函数通常为新申请的内存做初始化工作。
//*/
//  memset(*pnode, 0, sizeof(NODE));
//  (*pnode)->data = data;//初始化数据域
//  (*pnode)->next = NULL;//初始化指针域为NULL
//  return RES_OK;
//
//  /*NODE *head = NULL;
//  if (!initnode(&head, 100))
//  {
//      ...
//  }*/
//}

int initnode(void **pnode, int data)////申明一个任意类型的指向指针变量的指针,一个data ,
////调用initnode(&tt, 100);,任意类型的指针变量pnode的值存储结构体指针的tt的地址,pnode指向tt
{
NODE *pstNode = NULL;////申明一个空的结构体指针变量
//printf("pstNode: %d\n", pstNode);
pstNode = (NODE*)malloc(sizeof(NODE));
//printf("pstNode: %d\n", pstNode);
if (!pstNode)
return RES_FAILD;

/*
void *memset(void *s, char ch, unsigned n);
功能:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,
这个函数通常为新申请的内存做初始化工作。
*/
memset(pstNode, 0, sizeof(NODE));
pstNode->data = data;//初始化数据域
pstNode->next = NULL;//初始化指针域为NULL
*pnode = pstNode;
return RES_OK;
}

int main() {

//NODE *tt;//申明结构体指针变量
////printf("tt: %d\n", tt);
//initnode(&tt, 100);//传入结构体指针变量的地址和结构体data的数值
//printf("%d\n", tt);

NODE t1;
t1.data = 100;
printf("%d\n", t1);//输出100
NODE *p;
p = &t1;
printf("%d\n",p);
printf("%d\n", p->data);
NODE t2;
t2.data = 200;
//结构体变量之间的赋值
t2 = t1;
printf("%d\n", t2.data);//输出100

//创建一个结构体指针变量,需要malloc创建空间,才能使用
NODE *s1;

NODE *s2 = (NODE*)malloc(sizeof(NODE));
s2->data = 300;
printf("%d\n", s2->data);//输出300
NODE *s3 = (NODE*)malloc(sizeof(NODE));
s3->data = 400;
printf("%d\n", s3->data);//输出400
////由此可以结构体指针变量的赋值,就是将结构体指针变量存储的地址赋值给另一个变量
s3 = s2;
printf("%d\n", s3->data);//输出300
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: