链表的创建 、头插法、尾插法
- linklist.c
#include<stdio.h>
#include<stdlib.h>
#include "linklist.h"
/*
功能:
创立一个有数据的链表
返回值:
头指针 保存链表第一个结点
*/
Node *create()
{
Node *first = NULL; //还未创建时,第一个结点和最后一个结点都为NULL
Node *last = NULL;
element x;
printf("请输入一串完整的链表,输入0结束输入。\n");
while(1)
{
scanf("%d",&x);
if(x == 0) //遇到0停止
{
break;
}
//分配内存空间
Node *p = (Node *)malloc(sizeof(Node));
//给新结点赋值
p->next = NULL;
p->data = NULL;
//把结点放入链表,分情况讨论
if(first == NULL) //第一个结点放入空链表
{
first = p;
last = p;
}
else //使用两种方法
{
#if 0 //表达式为真是执行if语句,为假时执行else语句
p->next = first; //头插法
first = p;
#else
last->next = p; //尾插法
last = p;
#endif
}
}
return first;
}
/*
功能:
打印一个链表的所有元素的值
参数:
@first:
头指针
*/
void printflink(Node *first) //依次输出结点
{
Node *p = first;
printf("表中的值依次是:\n");
while(p)
{
printf("%d",p->data); //打印当前结点的数据
p = p->next; //让p指向下一个元素
}
printf("\n");
free(p);
}
-
linklist.h
#ifndef __LINKLIST_H__ #define __LINKLIST_H__ #define element int; typedef struct node { element data; struct node *next; }Node; /* 功能:创建一个链表,输入0结束 返回值:头指针 */ Node *create(); /* 功能:打印链表 参数:@first 头指针 */ void printfList(Node *first); #endif
-
main.c
#include<stdio.h> #include "linklist.h" int main() { // 1、创建一个链表 Node *first = create(); // 2、打印链表值 printfList(first); return 0; }
-