知识点
1、结构体的嵌套:
struct NODE
{
int data;
struct NODE *next
};
NODE这个结构体中第一个变量是数据;第二个变量是一个指向与它自己相同类型的变量的指针,故变量类型也是struct NODE.
2、typedef
typedef是一种用来为数据类型定义新的名称的关键字。通过使用typedef,可以为现有的数据类型(如int、char、struct等)定义一个新的别名,使得代码更易读和理解:
①为基本数据类型创建别名:
typedef int integer;
integer num = 10;
②为结构体创建别名:
typedef struct
{
int age;
char name[20];
} Person;
Person p1;
p1.age = 25;
strcpy(p1.name, "John");
③为函数指针创建别名:
typedef void (*func_ptr)(int);
/*定义新的类型func_ptr,它是指向参数为int,返回类型为void的函数的指针*/
void print_number(int num)
{
printf("Number: %d\n", num);
}
/*print_number函数,接受num并打印*/
func_ptr ptr = &print_number;
/*声明了一个名为ptr的变量,类型为func_ptr;
并将ptr指向了print_number这个函数*/
ptr(5);
/*将5作为参数传给ptr。实际上调用了print_number(5)*/
程序设计
例:读取一串整数,输入到链表中,直到输入的数为-1停止
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct _node
{
int value;
struct _node* next;
}Node;
int main()
{
int number;
Node* head = NULL;
Node* p=(Node*)malloc(sizeof(Node));
do
{
scanf("%d", &number);
if (number != -1)
{
p->value = number;
p->next = NULL;
}
if (head == NULL)
head = p;
else
{
if (head->next != NULL)
head = head->next;
head->next = p;
}
}while (number != -1);
return 0;
}
如果将读数的操作包装成一个函数,并将链表中的数打印出来:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct _node
{
int value;
struct _node* next;
}Node;
Node* AddToLinkedList(Node* head,int number);
int main()
{
int number;
Node* head = NULL;
Node* current = NULL;
do
{
scanf("%d", &number);
if (number != -1)
{
head = AddToLinkedList(head, number);
}
} while (number != -1);
current = head;
while (current!= NULL)
{
printf("%d ", current->value);
current = current->next;
}
return 0;
}
Node* AddToLinkedList(Node* head,int number)
{
Node* p = (Node*)malloc(sizeof(Node));
Node* lastNode = head;
p->value = number;
p->next = NULL;
if (head == NULL)
{
head = p;
}
else
{
while(lastNode->next != NULL)
{
lastNode = lastNode->next;
}
lastNode->next = p;
}
return head;
}