品牌建设对企业的发展的作用,官网seo优化找哪家做,德阳seo,自建站平台删除指定结点
流程#xff1a;判断传入数据和pos的位置是否符题意——找到删除位置的前一个结点#xff0c;找到后要判断所找的位置是否越界——删除指定结点。代码#xff1a;
//删除指定结点
int Delete_Pos(Node* h, int pos)
{if (NULL h || pos 1){return FALS…删除指定结点
流程判断传入数据和pos的位置是否符题意——找到删除位置的前一个结点找到后要判断所找的位置是否越界——删除指定结点。代码
//删除指定结点
int Delete_Pos(Node* h, int pos)
{if (NULL h || pos 1){return FALSE;}Node* tmp h;int i;for (i 0; i pos - 1; i){if (NULL tmp-next){break;}tmp tmp-next;}if (NULL tmp){printf (删除位置越界);return FALSE;}Node* p tmp-next;tmp-next p-next;free(p);return TRUE;
}
和头指针的区别不需要考虑空表的情况。
逆序
流程先后判断传入数据是否正确是否为空表是否只有一个结点——从前往后3个为一组将前两个指向调换以此为循环向后遍历直到结束结束标志为一组中第二个为NULL——最后一步将逆序后的最后一个指向NULL头指针 h 指向逆序后的第一个。原理和头指针一样由于头结点的存在导致代码略有不同 代码
//逆序
int Reverse_List(Node* h)
{if (NULL h || NULL h-next|| NULL h-next-next){return FALSE;}Node* pre h-next;Node* cur h-next-next;Node* tmp;while (cur){ tmp cur-next;cur-next pre;pre cur;cur tmp;}//最终操作略有差异h-next-next NULL; h-next pre;return TRUE;
}
删除数据
流程判断传入数据的准确性——保存头结点的地址寻找所要删除的数据并记录下tmp-next——判断记录的是否为空不为空则删除那个结点 代码
//删除数据
int Delete_Data(Node* h, LinkData data)
{if (NULL h){return FALSE;}Node* tmp h;while (tmp-next){if (data tmp-next-data){break;}tmp tmp-next;}if (NULL tmp-next){return FALSE;}Node* p tmp-next;tmp-next p-next;free(p);return TRUE;
}
查找元素
流程判断传入数据是否正确——保存第一个结点的地址遍历知道找到所要找的元素保存下标。没找到则返回FALSE。代码
//寻找元素
int Find_Element(Node* h, LinkData data, int* x)
{if (NULL h){return FALSE;}Node* tmp h-next;int k 1;while (tmp){if (data tmp-data){*x k;}k;tmp tmp-next;}return FALSE;
}
获取顺序表中的元素通过位置获取
流程判断传入数据的准确性——遍历到pos位置处将pos处的数据保存到*x中。代码
// 获取顺序表中的元素通过位置获取
int Get_Element(Node* h, int pos, int *x)
{if (NULL h || pos 1){return FALSE;}Node* tmp h;int i;for (i 0; i pos; i){if (NULL tmp){break;}tmp tmp-next;}//判断tmp是否为空if (NULL tmp){return FALSE;}else{*x tmp-data;}return TRUE;
}
获取长度
流程判断传入数据是否正确——从第一个节点遍历到最后一个结点计算共有多少结点。代码
//获取长度
int Get_Len(Node * h)
{if (NULL h){return FALSE;}int count 0;Node* tmp h;while (tmp-next){count;tmp tmp-next;}return count;
}
清除列表
流程利用Delete_Pos一个一个清除。代码
int Clean_List(Node * h)
{if (NULL h){return FALSE;}Node *tmp h;while (tmp-next){Delete_Pos(h, 1);}return 0;
}输出显示
// 输出显示
void Display(Node *h)
{if (NULL h){return;}int count 0;Node *tmp h-next;while (tmp){printf (count % 4 ? %8d : %8d\n, tmp-data);tmp tmp-next;}printf (\n);
}销毁链表
原理利用Clean_List销毁最后要释放空间防止内存泄露
//销毁链表
int Destroy(Node *h)
{if (NULL h){return FALSE;}Clean_List(h);free(h);return TRUE;
}