编写一个程序实现如下功能:建立一个单链表,每个结点数据要有职工号、工资。用一个creat函数来建立链表,用list函数输出数据(数据自定)

#include
#include
#include
#include

typedef struct Employee{
	int num;
	float pay;
	struct Employee *next;
}node;
//给struct Employee重新取个名字叫node

//创建初始节点,返回一个指向node结构体的指针
node *create(){
	node *head,*p1,*p2;
	head = NULL;
	p1 = (node*)malloc(sizeof(node));
	//开辟一个一个node大小的内存并让p1指向这个node
	p2 = p1;//让p2也指向这个node
	scanf("%d%f",&p1->num,&p1->pay);
	//读取职工号和工资
	while(p1 -> num != 0){
		if(head == NULL){
			head = p1;
			//若头指向为空,代表它为第一个节点,让它指向头节点,也就是此时的p1
		}
		else{
			p2 -> next = p1;
			//若不是头节点,就将那个节点的指针指向p1
			//之后p1会移到下一个节点上,这样使得那个节点的next能指向下一个节点
		}
		p2 = p1;//让p2跑到与p1的同一个节点上
		//开辟空间相当于让p1移动到下一个节点,此时p1指向新开辟的那个node
		p1 = (node*)malloc(sizeof(node));
		scanf("%d%f",&p1->num,&p1->pay);
	}
	p2 -> next = NULL;
	return head;
}

void print(node *head){
	node *p;
	p = head;
	if(head != NULL)
	  do{
	  	printf("%d,%.2f\n",p->num,p->pay);
		p = p->next;
		}while(p != NULL);
}

int main(){
	node *head;
	head = create();
	printf("The linked list:\n");
	print(head);
	return 0;
}

下面的是第二次重新敲的,有总结 

#include
#include

typedef struct employee{
	int num;
	float pay;
	struct employee *next;
}node;

node *creat(){
	node *p1,*p2,*head;
	p1 = (node*)malloc(sizeof(node));
	p2 = p1;
	scanf("%d%f",&p1->num,&p1->pay);
	head = NULL;
	while(p1->num != 0){
		if(head == NULL) head = p1;
		else{
			//这一段往下记住
			//先让next指针指向p1
			//指针跑,它追它逃,即p2追到p1,然后p1又逃走
			p2->next = p1;
		}
		p2 = p1;
		p1 = (node*)malloc(sizeof(node));
		scanf("%d%f",&p1->num,&p1->pay);
	}
	//注意这里是让p2的next指针为空
	//还要返回头指针
	p2 -> next = NULL;
	return head;
}

void print(node *head){//传入的时候*head前面记得加node
	node *p;
	p = head;
	if(head != NULL)//首先保证头节点指针不为空
	//才能往下输出
		while(p != NULL){
			printf("%d%.2f\n",p->num,p->pay);
			p = p->next;
		}
}

int main(){
	node *head;
	//creat不仅得到了头指针,还完成了链表的存储
	head = creat();
	printf("The linked list:\n");
	print(head);
	return 0;
}

你可能感兴趣的:(链表,数据结构)