本节内容主要学习了单链表的创建,添加,插入,删除。
通俗的讲链表就是由一片片区域相互连接而形成可以储存数据的表,每个区域都由数据域和指针域构成。
图示:
链表的创建
typedef struct LinkList{
char data;
struct LinkList *next;
}LNode,*LinkList,*NodePtr;
//定义链表结构体
LinkList initLinkList{
NodePtr tempterList = (NodePtr)malloc(sizeof(LNode));
tempterList->data = '\0';
tempterList->next = NULL;
}//创建头结点
链表的增添(尾插法)
图示
代码展示
void appengElement(NodePtr paraHeader,char paraChar){
NodePtr p,q;
p = paraHeader;
while(p->next!=NULL){
p = p->next;
}
q = (NodePtr)malloc(sizeof(LNode));
q->data = paraChar;
q->next = NULL;
p->next = q;
}//运用尾插法添加数据
链表的插入
图示
代码
void insertElement(NodePtr paraHeader,char paraChar,int paraPosition){
NodePtr p,q;
p = paraHeader;
for(int i = 0;i < paraPosition;i++){
p = p->next;
if(p->next == NULL){
printtf("该位置不能插入");
return;
}
}
q = (NdePtr)malloc(sizeof(LNode));
q->data = paraChar;
q->next = NULL;
p-next = q;
}
链表的删除
代码
void deleteElement(NodePtr paraHeader,char paraChar){
NodePtr p,q;
p = paraHeader;
while(p->next !=NULL&&p->next->data!=paraChar){
p = p->next;
if(p->next == NULL){
printf("不能删除%c\r\n",paraChar);
return;
}
}
q = p->next;
p->next = q->next;
free(q);
}
全部代码:
#include <stdio.h>
#include <malloc.h>
typedef struct LinkNode{
char data;
struct LinkNode *next;
}LNode,*LinkList,*NodePtr;
LinkList initLinkList();
void printList(NodePtr paraHeader);
void appendElement(NodePtr paraHeader,char paraChar);
void deletElement(NodePtr paraHeader,char paraChar);
void insertElement(NodePtr paraHeader,char paraChar,int paraPosition);
void basicAddressTest();
void appendInsertDeleteTest();
int main(){
appendInsertDeleteTest();
basicAddressTest();
}
LinkList initLinkList(){
NodePtr temperHeader = (NodePtr)malloc(sizeof(LNode));
temperHeader->data = '\0';
temperHeader->next = NULL;
return temperHeader;
}
void printList(NodePtr paraHeader){
NodePtr p;
p = paraHeader->next;
while(p!=NULL){
printf("%c",p->data);
p=p->next;
}
printf("\r\n");
}
void appendElement(NodePtr paraHeader,char paraChar){
NodePtr p,q;
p = (NodePtr)malloc(sizeof(LNode));
p->data = paraChar;
p->next = NULL;
q = paraHeader;
while(q->next!=NULL){
q = q->next;
}
q->next = p;
}
void deleteElement(NodePtr paraHeader,char paraChar){
NodePtr p,q;
p = paraHeader;
while(p->next !=NULL&&p->next->data !=paraChar){
p = p->next;
if(p->next ==NULL){
printf("不能删除该元素\r\n");
return ;
}
}
q = p->next;
p->next = q->next;
free(q);
}
void insertElement(NodePtr paraHeader,char paraChar,int paraPosition){
NodePtr p,q;
p = paraHeader;
for(int i = 0; i<paraPosition;i++){
p = p->next;
if(p==NULL){
printf("该位置不能插入");
return ;
}
}
q = (NodePtr)malloc(sizeof(LNode));
q->data = paraChar;
q->next = p->next ;
p->next = q;
}
void appendInsertDeleteTest(){
LinkList tempList = initLinkList();
printList(tempList);
appendElement(tempList,'H');
appendElement(tempList,'e');
appendElement(tempList,'l');
appendElement(tempList,'l');
appendElement(tempList,'o');
appendElement(tempList,'!');
printList(tempList);
deleteElement(tempList,'e');
deleteElement(tempList,'a');
deleteElement(tempList,'o');
printList(tempList);
insertElement(tempList,'o',1);
printList(tempList);
}
void basicAddressTest(){
LNode tempNode1,tempNode2;
tempNode1.data= 4;
tempNode1.next = NULL;
tempNode2.data = 6;
tempNode2.next = NULL;
printf("The first node:%d,%d,%d\r\n",&tempNode1,&tempNode1.data,tempNode1.next);
printf("The second node:%d,%d,%d\r\n",&tempNode2,&tempNode2.data,tempNode2.next);
tempNode1.next = &tempNode2;
}
测试结果