实际应用环境:
工控应用中:
1,来一个信号,记录当前的时间。来多个则依次记录多个时间,即每一个时间,一个信号发生过。
2,延时一定时间后, 输出一个动作。并删除第一个节点。链表并指向第二个节点。
3,依次类推。
4,其它动作 在Keil中完成。
基本 队列模型如下:
#include "stdio.h"
#include "stdlib.h"
struct Node
{
int data;
struct Node* next;
};
typedef struct Node List;
// typedef struct Node Pos;
List* CreatList()
{
List* head;
head = (List*)malloc(sizeof(List));
head->data = -1;
head->next = NULL;
return head;
}
void AddNode(List* p, int datainput)
{
List* head;
List* NodeNew;
NodeNew = CreatList();
head = CreatList();
head = p; //保存首节点
NodeNew->data = datainput; //新节点数据赋值
NodeNew->next = NULL; // 清 指针域
while (p->next != NULL) //判断当前是否为最后一个节点
p = p->next; //移动到下一个节点
p->next = NodeNew; //新节点地址链接到 链表指向域
p = head; //移动到首节点
}
void DelHeadNode(List * p)
{
List* DelNode= NULL ;
if (p->next != NULL)
{
DelNode = p->next; //保存要删除的节点
p->next = p->next->next; //移动到下一节点
free(DelNode); //释放要删除的结点
}
}
void PrintList(List * p)
{
int i = 0;
List* head;
head = p;
head = head->next;
if (head == NULL)
printf("\nThe List is Empty! \n");
while (head != NULL)
{
printf("%8d:%2d \t", i++, head->data);
head = head->next;
}
}
main()
{
List* TestList;
TestList = CreatList(); //新建链表
if (1)
AddNode(TestList, 1); //增加节点
if (1)
AddNode(TestList, 1); //增加节点
if (1)
AddNode(TestList, 1); //增加节点
if (1)
AddNode(TestList, 1); //增加节点
if (1) //动作已输出。
DelHeadNode(TestList); //删除首节点(不包含头节点)
PrintList(TestList); //打印节点
Free(TestList);
getch();
}
//持续更改中... 201905152222