顺序表相比,链表增强了数据间的连接,一个接一个,发现July的博客比较深层次,还是打好基础再了解更深一层的东西。
还是分LinkList.h,LinkList.c,main.c
之前匆匆忙忙赶东西时,就copy一大段改改就交了。自己重写后发现诸多问题在这一块里。
LinkList.h
#include
#include
typedef int DataType;
typedef struct SimpleLinkList *Node;
struct SimpleLinkList{
DataType info;
Node link;
} ;
typedef struct SimpleLinkList *LinkList;
LinkList CreateNUllList();
int isNull(LinkList linklist);
int insertPost(LinkList linklist,Node node,DataType element);
int insertBack(LinkList linklist,Node node,DataType element);
int printList(LinkList linklist);
Node searchElement(LinkList linklist,DataType element);
DataType showValue(LinkList linklist,Node node);
int deleteElement(LinkList linklist,DataType element);
LinkList combine(LinkList one,LinkList another);
#include "LinkList.h"
LinkList CreateNUllList(){
LinkList linklist = (LinkList)malloc(sizeof(struct SimpleLinkList));
if(linklist != NULL)
linklist -> link = NULL;
else
printf("create fail!");
return linklist;
}
int isNull(LinkList linklist){
return (linklist != NULL); // not null return 1
}
int insertPost(LinkList linklist,Node node,DataType element){
Node temp = (Node)malloc(sizeof(struct SimpleLinkList));
// 前插 注意如果没有任何元素 那么把头结点指向 element
if(temp == NULL){
printf("insert fail");
return 0;
}else{
for(linklist;linklist!= NULL; linklist = linklist -> link) {
if(linklist -> link == node){
temp ->info = element;
linklist ->link = temp;
temp ->link = node;
}
}
}
return 1;
//前插的节点 是要我们自己传参注意 而不是把函数写成
}
// insert forward
//带头节点的链表 头结点没有值
// 其实 所谓的后插 是后插 但是现在的node是 链表 实际插入的时候
//所以 node的link是第一个数 所谓变成“前插”
int insertBack(LinkList linklist,Node node,DataType element){
Node temp = (Node)malloc(sizeof(struct SimpleLinkList));
if(temp == NULL){
printf("insert element fail!");
return 0;
}
temp -> info = element;
temp -> link = node -> link;
node -> link = temp;
return 1;
} //insert back
int printList(LinkList linklist){
if(linklist == NULL){
printf("it is null");
return 0;
}
while(linklist -> link != NULL){
printf("%2d",linklist->link->info);
linklist = linklist -> link ;
}
printf("\n");
return 1;
}
Node searchElement(LinkList linklist,DataType element){
Node node;
if(linklist == NULL){
printf("the element was not found");
return NULL;
}
node = linklist -> link;
while(node != NULL && node -> info != element){
node = node -> link;
}
if(node == NULL){
return NULL;
}
return node;
}
DataType showValue(LinkList linklist,Node node){
Node temp;
if(linklist == NULL){
printf("the element was not found");
return NULL;
}
temp = linklist -> link;
while(temp != NULL && temp -> link != node){
temp = temp -> link;
}
return node;
}
int deleteElement(LinkList linklist,DataType element){
Node node;
Node temp;
if(linklist == NULL){
printf("the element you deleted was not found");
return 0;
}
node = linklist ;
while(node ->link!= NULL && node ->link-> info != element){
// link 的info 是element之前。
node = node -> link;
// printf("test\n");link ->info 先要判断link为不为空!
}
// printf("test2");
if(node->link== NULL ){
printf("the