前沿:用单向链表实现了队列的插入和删除操作。并且实现了队列的反串。
#include <stdio.h>
#include <stdlib.h>
struct Node
{
int data;
struct Node *next;
};
struct List
{
struct Node *head;
struct Node *rear;
unsigned int NodeNumber;
};
bool revers(List *ListNode);
void creat_list(List *ListNode)
{
ListNode->head = NULL;
ListNode->rear = NULL;
ListNode->NodeNumber = 0;
}
bool AddNode(unsigned int NodeData, List *ListNode)
{
Node *AddData = (Node *)malloc(sizeof(Node));
AddData->data = NodeData;
AddData->next = NULL;
if(ListNode == NULL)
{
return false;
}
else
{
if(ListNode->NodeNumber == 0 )
{
ListNode->head = AddData;
}
else
{
ListNode->rear->next = AddData;
}
ListNode->rear = AddData;
ListNode->NodeNumber++;
}
return true;
}
//实现的是队列,先进先出的操作
bool DelNode(unsigned int *NodeData,List *ListNode)
{
Node *DelAddress = NULL;
if( 0 == ListNode->NodeNumber || NULL==ListNode)
{
return false;
}
else
{
ListNode->NodeNumber--;
*NodeData = ListNode->head->data;
DelAddress = ListNode->head;
ListNode->head = ListNode->head->next;
free(NodeData);
}
return true;
}
void main()
{
List TextList;
Node now;
unsigned int AddDeldata = 0;
creat_list(&TextList);
printf("input a data to add list\n");
scanf("%d",&AddDeldata);
while((9>AddDeldata)&&(AddDeldata>0))
{
AddNode(AddDeldata, &TextList);
scanf("%d",&AddDeldata);
}
revers(&TextList);
now = *(TextList.head);
while ( now.next != NULL)
{
printf("%d\n",now.data);
now = *(now.next);
}
printf("%d\n",now.data);
}
bool revers(List *ListNode)
{
Node *front,*middle,*last;
front = ListNode->head;
ListNode->rear = front;
middle = front->next;
last = middle->next;
if (front==NULL)
{
return false;
}
if(middle==NULL)
{
return true;
}
front->next = NULL;
while (last != NULL)
{
middle->next = front;
front = middle;
middle = last;
last = last->next;
}
middle->next = front;
ListNode->head = middle;
return true;
}