做网站属于什么职位,小制作大全,视频剪辑素材免费网站,图片上传分享平台单链表之单循环链表
单向循环链表的关键所在是最后一个节点的next存储了头节点的地址#xff0c;这是对单向循环链表的操作关键所在 接下来我将实现增、删、改、查这四项最基本的操作#xff0c;剩下你想要什么操作自己可以根据对链表的理解添加对应的数据操作
后面main函数…单链表之单循环链表
单向循环链表的关键所在是最后一个节点的next存储了头节点的地址这是对单向循环链表的操作关键所在 接下来我将实现增、删、改、查这四项最基本的操作剩下你想要什么操作自己可以根据对链表的理解添加对应的数据操作
后面main函数里是对代码的测试 //单向循环链表//定义链表节点
typedef struct Node{int data;Node* next;
}Node;
Node * createList()
{Node* headNode (Node*)malloc(sizeof(Node));headNode-next NULL;return headNode;
}
//创建节点
Node* createNode(int data)
{Node * newNode (Node*)malloc(sizeof(Node));newNode-data data;newNode-next NULL;return newNode;
}
//增加节点
void addNode(Node * headNode, int data)
{Node * newNode createNode(data);if (headNode-next NULL){headNode-next newNode;newNode-next headNode;}else{newNode-next headNode-next;headNode-next newNode;}
}
//删除节点
void deleteNode(Node * headNode,int data)
{//先找节点对节点的指针要进行移动Node* pPro headNode;Node *pPos headNode-next;while (pPos-data ! datapPos-next!NULL){pPro pPos;pPos pPos-next;}if (pPos-next NULL){printf(你要删除的节点不存在\n);return;}pPro-next pPos-next;free(pPos);}
//查找节点
void findNode(Node * headNode, int data)
{Node * pMove headNode-next;while (pMove-data ! data){pMove pMove-next;}printf(你想要找的节点数据%d已找到\n, pMove-data);
}
//改动节点内的数据
void modifyNodeData(Node *headNode, int updata, int data)
{//这个和找节点的思路是一样的先找到指定数据节点再对其进行修改Node * pMove headNode-next;while (pMove-data ! data){pMove pMove-next;}pMove-data updata;printf(修改数据成功\n);}
//输出节点的数据
void printList(Node * headList)
{Node * pMove headList-next;while (pMove ! headList)//当你访问节点的next里的地址不是头节点的地址继续向下走{printf(%d--, pMove-data);pMove pMove-next;}printf(\n);
}
int main()
{Node *list createList();for (int i 1; i 11; i){addNode(list, i);}printList(list);findNode(list, 5);printList(list);modifyNodeData(list, 45, 6);printList(list);deleteNode(list, 9);printList(list);return 0;
}