数据结构实习题目:设计地理要素三大实体之一的点实体的数据结构,应包含名称,ID号,三维坐标.设计以上述点实体为对象的循环队列结构;设计上述循环队列的操作算法,含入队,出队等基本

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/17 10:39:15
数据结构实习题目:设计地理要素三大实体之一的点实体的数据结构,应包含名称,ID号,三维坐标.设计以上述点实体为对象的循环队列结构;设计上述循环队列的操作算法,含入队,出队等基本数据结构实习题目:设计地

数据结构实习题目:设计地理要素三大实体之一的点实体的数据结构,应包含名称,ID号,三维坐标.设计以上述点实体为对象的循环队列结构;设计上述循环队列的操作算法,含入队,出队等基本
数据结构实习题目:设计地理要素三大实体之一的点实体的数据结构,应包含名称,ID号,三维坐标.
设计以上述点实体为对象的循环队列结构;
设计上述循环队列的操作算法,含入队,出队等基本算法;
设计一个简单主程序,验证上述数据结构和算法的可行性和正确性;
上述内容均在VC环境下,以C语言编程实现.

数据结构实习题目:设计地理要素三大实体之一的点实体的数据结构,应包含名称,ID号,三维坐标.设计以上述点实体为对象的循环队列结构;设计上述循环队列的操作算法,含入队,出队等基本
#include
#include
#define POS_NAME_MAX_LEN 10
typedef struct pos_st{
int id;
char name[POS_NAME_MAX_LEN];
int pos_x;
int pos_y;
int pos_z;
//其他属性...
}POS;
// 以上为1
typedef struct pos_cirLink{
POS pos_t;
struct pos_cirLink *pNext;
}POS_CIRLINK;
// 以上为:2 设计以上述点实体为对象的循环队列结构
//注意:程序里边的插入和删除是根据ID号来操作
// 故而这里的ID必须是唯一的.
POS_CIRLINK *g_pPosLinkHead = NULL; //define global head
// 添加一个结点
int insert_one_item(POS *pPos)
{
POS_CIRLINK *pos_node, *p_tmp;
pos_node = malloc(sizeof(POS_CIRLINK));
if (pos_node == NULL)
{
return 0;
}
memcpy(pos_node, pPos, sizeof(POS_CIRLINK));
if (g_pPosLinkHead == NULL) //first node
{
g_pPosLinkHead = pos_node;
pos_node->pNext = pos_node;
}
else
{
//first, nail
p_tmp = g_pPosLinkHead;
while(p_tmp->pNext != g_pPosLinkHead)
p_tmp = p_tmp->pNext;
p_tmp->pNext = pos_node;
//second, head
p_tmp = g_pPosLinkHead;
g_pPosLinkHead = pos_node;
pos_node->pNext = p_tmp;
}
return 1;
}
// 删除一个结点
int delete_one_item(int id)
{
POS_CIRLINK *p_node, *p_cur, *p_tmp;
p_cur = p_node = g_pPosLinkHead;
if (p_cur == NULL) //there is no node to delete
return 0;
if (p_cur->pNext == p_cur) //only one node
{
if (p_cur->pos_t.id == id)
{
free(g_pPosLinkHead);
g_pPosLinkHead = NULL;
return 1;
}
else
{
return 0;
}
}
//find the node to delete
while ( p_node )
{
if (p_node->pos_t.id == id)
{
break;
}
p_node = p_node->pNext;
if (p_node == g_pPosLinkHead) //nail, break
break;
}
if (p_node->pos_t.id == id)
{
p_tmp = p_node->pNext;
//nail change
p_cur = p_tmp;
while(p_cur->pNext != p_node)
{
p_cur = p_cur->pNext;
}
p_cur->pNext = p_node->pNext;
//head change
free(p_node);
//if it is the first node,modify the g_pPosLinkHead
if (p_node == g_pPosLinkHead)
g_pPosLinkHead = p_tmp;
}
else //not found
{
return 0;
}
}
//以上为: 3 设计上述循环队列的操作算法,含入队、出队等基本算法.
int main()
{
//int tmp_id;
POS tmp_pos;
//insert first node
tmp_pos.id = 1;
strcpy(tmp_pos.name, "aaaa");
tmp_pos.pos_x = tmp_pos.pos_y = tmp_pos.pos_z = 11;
insert_one_item(&tmp_pos);
//insert second node
tmp_pos.id = 2;
strcpy(tmp_pos.name, "bbbbb");
tmp_pos.pos_x = tmp_pos.pos_y = tmp_pos.pos_z = 22;
insert_one_item(&tmp_pos);
//insert third node
tmp_pos.id = 3;
strcpy(tmp_pos.name, "ccccc");
tmp_pos.pos_x = tmp_pos.pos_y = tmp_pos.pos_z = 33;
insert_one_item(&tmp_pos);
//insert...
//delete the second node
delete_one_item(2);
return 1;
}
//以上为: 4 设计一简单主程序,验证上述数据结构和算法的可行性和正确性.
//以上,已经测试验证通过.