#include<stdio.h>
#include<stdlib.h>
struct Node{
int data;//数据域
struct Node* next;//指针域
};
/*创建链表*/
struct Node *createlist()
{
struct Node* headNode=(struct Node*)malloc(sizeof(struct Node));
//headNode成为了结构体变量
//变量使用前必须被初始化
//headNode->data=1;
headNode->next=NULL;
return headNode;
}
/*创建节点*/
struct Node *createNode(int data)
{
struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
newNode->data=data;
newNode->next=NULL;
return newNode;
}
/*打印节点*/
void printList(struct Node *headNode)
{
struct Node* pMOve=headNode->next;
while(pMOve)
{
printf("%d",pMOve->data);
pMOve=pMOve->next;
}
}
/*插入节点,参数:插入哪个链表 插入节点的数据是多少*/
void insertNodeByHead(struct Node* headNode,int data)
{
//创建插入的节点
struct Node* newNode=createNode(data);
newNode->next=headNode->next;
headNode->next=newNode;
}
void deleteNodeByAppoint(struct Node* headNode,int posData)
{
struct Node* posNode=headNode->next;//posNode只能从表头的下一个节点开始寻找
struct Node* posNodeFront=headNode;//posNodeFront在posNode前面
if(posNode==NULL) printf("无法删除链表为空\n");
else
{
while(posNode->data!=posData)
{
posNodeFront=posNode;
posNode=posNodeFront->next;
if(posNode==NULL)
{
printf("没有找到相关信息,无法删除\n");
break;
}
}
posNodeFront->next=posNode->next;
free(posNode);
}
}
int main(void)
{
struct Node* list=createlist();
insertNodeByHead(list,1);
insertNodeByHead(list,2);
insertNodeByHead(list,3);
printList(list);
deleteNodeByAppoint(list,2);
printList(list);
return 0;
}
什么是链表;
链表是结构体变量与结构体变量连接在一起。
动态创建一个链表:动态内存申请+模块化设计
1.创建链表(创建一个表头表示整个链表)
2.创建节点
3.插入节点(本程序采用的是表头法插入即永远在排头后面插入数据,不可能插入到headNode前面去)
4.删除节点(本程序采用的是指定位置删除法)
5.打印遍历链表(主要用来测试,头节点不打印)