这个程序比较长, 就写一下你的实验四吧, 有了实验四来做试验五不难, 只是打开文件, 读取数据而已实验四:结果是: |1|2|2|-->|4||4|1|-->|7|10|4|-->|12|14|3| 附上运行截图:#include
#include
struct nodes{
int head,tail,num;
struct nodes *next;
};
typedef struct nodes node;
typedef struct nodes* link;
int main()
{
int buff[] = {1,2,4,7,8,9,10,12,13,14};
int len, i;
link hp,p,newp;
len = sizeof(buff)/sizeof(int);
//申请一个头节点,并将第一个数字填入头节点的head和tail,并将num设为1,next归为NULL
hp = (link)malloc(sizeof(node));
p = hp;
p->head = buff[0];
p->tail = buff[0];
p->num = 1;
p->next = NULL;
for(i = 1; i < len; i++)
{
if(buff[i] == p->tail + 1)
{
//如果当前数字与当前节点的tail连续,则用该数字覆盖tail并将num++
p->tail = buff[i];
p->num ++;
}
else
{
//如果当前节点与当前节点tail不连续,则新建一个节点接在链表尾部并将数字填入head和tail,num设为1,next归为NULL
newp = (link)malloc(sizeof(node));
p->next = newp;
p = p->next;
p->head = buff[i];
p->tail = buff[i];
p->num = 1;
p->next = NULL;
}
}
//遍历并输出每个节点的元素
p = hp;
while(len && p)
{
printf("|%d|%d|%d|",p->head,p->tail,p->num);
if(p->next)
{
printf("-->");
p = p->next;
}
else
{
printf("");
break;
}
}
//释放之前所申请的空间
p = hp;
while(p)
{
newp = p->next;
free(p);
p = newp;
}
hp = NULL;
newp = NULL;
p = NULL;
}