今天内容较少,主要是头插和尾插法建立链表,但是需要上次的部分定义
结点定义
typedef int ElemType ;
typedef struct LNode{ // 定义结点
ElemType data ;
LNode *next ;
}LNode,*LinkList ;
打印链表字定义 :
void PrintList(LinkList L) {
L = L->next;
while (L != nullptr) {
printf("%3d", L->data); //打在一行,空三格
L = L->next;
}
printf("\n");
}
以上两组定义和之前链表的定义相同 。
下面是头插法 程序如下(注意驼峰命名法和下划线命名法):
void list_head_insert(LinkList &L){ 头插法新建字定义 下划线定义法 每个单词用下划线隔开
ElemType x ;
L=(LNode *)malloc(sizeof(LNode)) ; //LNode*是结构体指针 和 LinkList完全等价
L->next= nullptr ;
scanf("%d" ,&x) ;
LNode *s ; //申请新节点
while (x!= 9999){ //输入9999结束
s=(LinkList)malloc(sizeof(LNode)) ; //LNode*是结构体指针 和 LinkList完全等价
s->data=x ;
s->next=L->next ; //此刻头结点指向空
L->next=s ;
scanf("%d" ,&x) ; //最后读,最后一个数据null不会存储
}
}
尾插法的定义如下:
void list_tail_insert(LinkList &L){
ElemType x ;
L=(LNode *)malloc(sizeof(LNode)) ; //LNode*是结构体指针 和 LinkList完全等价
L->next= nullptr ;
scanf("%d" ,&x) ;
LNode *s ,*r=L ; //申请新结点s 指针r指向链表尾
while (x!=9999){
s=(LinkList)malloc(sizeof(LNode)) ; //LNode*是结构体指针 和 LinkList完全等价
s->data=x ;
r->next=s ; //把新结点s放到r所指区域
r=s ; //把s赋给r 即r指针仍指向链尾
scanf("%d" ,&x) ; //读下一个数据
}
r->next= nullptr ;
}
综合运行代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType ;
typedef struct LNode{ // 定义结点
ElemType data ;
LNode *next ;
}LNode,*LinkList ;
void list_head_insert(LinkList &L){ 头插法新建字定义 下划线定义法 每个单词用下划线隔开
ElemType x ;
L=(LNode *)malloc(sizeof(LNode)) ; //LNode*是结构体指针 和 LinkList完全等价
L->next= nullptr ;
scanf("%d" ,&x) ;
LNode *s ; //申请新节点
while (x!= 9999){ //输入9999结束
s=(LinkList)malloc(sizeof(LNode)) ; //LNode*是结构体指针 和 LinkList完全等价
s->data=x ;
s->next=L->next ; //此刻头结点指向空
L->next=s ;
scanf("%d" ,&x) ; //最后读,最后一个数据null不会存储
}
}
void list_tail_insert(LinkList &L){
ElemType x ;
L=(LNode *)malloc(sizeof(LNode)) ; //LNode*是结构体指针 和 LinkList完全等价
L->next= nullptr ;
scanf("%d" ,&x) ;
LNode *s ,*r=L ; //申请新结点s 指针r指向链表尾
while (x!=9999){
s=(LinkList)malloc(sizeof(LNode)) ; //LNode*是结构体指针 和 LinkList完全等价
s->data=x ;
r->next=s ; //把新结点s放到r所指区域
r=s ; //把s赋给r 即r指针仍指向链尾
scanf("%d" ,&x) ; //读下一个数据
}
r->next= nullptr ;
}
void PrintList(LinkList L) {
L = L->next;
while (L != nullptr) {
printf("%3d", L->data); //打在一行,空三格
L = L->next;
}
printf("\n");
}
int main(){ //头插法和尾插法建立链表
LinkList (L) ;
printf("********************************************************************\n") ;
list_head_insert(L) ; //最后输入 8888 结束 (头插法输入是倒序)
PrintList(L) ;
printf("********************************************************************\n") ;
list_tail_insert(L) ; //尾插法插入是正序
PrintList(L) ;
printf("********************************************************************\n") ;
return 0;
}
以 9999 为结束标志,输入如下数字 1 2 3 4 9999 和 5 6 7 8 9999会输出以下链表: