2008秋-计算机软件基础- 实验二 参考源程序

实验二 参考源程序

/* Author : Eman Lee,

计算机软件基础 教材 P79, ex4
设有一头为head的带头结点的单链表,其数据域为整形数据且递增有序。
试写一算法,将元素插入链表适当的位置,以保持链表的有序性。
*/
#include
<stdio.h>
#include
<stdlib.h>

typedef 
int DataType;
struct nodetype//Define node 定义节点
{
 DataType data;
//Data field
 struct nodetype * next;//Pointer field which point to the next node
};

typedef 
struct nodetype NodeType;//Give struct nodetype a new name NodeType

NodeType 
* InitialLinkList()//Initialize a Linked List,and return the head pointer
{
 NodeType 
* head;
 head
=(NodeType *)malloc(sizeof(NodeType));//
 head->next=NULL;
 
return head;
}

void CreateLinkListInRear(NodeType * head, DataType numbers[], int LengthOfNumbers)
{
//Insert new node in the rear of link list.
    int i;
    NodeType 
* temp,* rear;
    rear
=head;
    
for(i=0;i<LengthOfNumbers;i++)
    {
        temp
=(NodeType *)malloc(sizeof(NodeType));
        temp
->data=numbers[i];
        temp
->next=NULL;
        rear
->next=temp;
        rear
=temp;
    }
}

void CreateLinkListInHead(NodeType * head, DataType numbers[], int LengthOfNumbers)
{
//Insert new node in the front of link list.
    int i;
    NodeType 
* temp,*front;
    
//front=head;
    for(i=0;i<LengthOfNumbers;i++)
    {
        temp
=(NodeType *)malloc(sizeof(NodeType));
        temp
->data=numbers[i];
        temp
->next=head->next;
        head
->next=temp;
        
//rear=temp;
    }
}

NodeType 
* SearchInLinkList(NodeType * head, DataType x)
{
//Search x in link list.
    NodeType * p=head->next;
    
while(p!=NULL)
    {
    
if(p->data==x)
        
return p;
    
else
        p
=p->next;
    }
    
return NULL;
}

void InsertNumberIntoLinkList(NodeType * head,DataType key,DataType x)
{
 
//Insert x after key in the linked list.
    
//Need two pointers if insert x before key.
    NodeType * location,*temp;
 
if((location=SearchInLinkList(head,key))!=NULL)
    {
        temp
=(NodeType *)malloc(sizeof(NodeType));
        temp
->data=x;
        temp
->next=location->next;
        location
->next=temp;
        printf(
"\n链表中插入元素%d",x);
    }
 
else
     printf(
"\nNot Found, Insert failed!\n");
}

void DeleteNumberFromLinkList(NodeType * head,DataType x)
{
 
//Delete x in the linked list.
 
//need two pointers
    
//todo
}

void PrintIntegerLinkList(NodeType * head)
{
//Show nodes on the screen.
    NodeType *temp;
    temp
=head->next;
    printf(
"\n显示所有元素:");
    
while(temp!=NULL)
    {
        printf(
"%d ",temp->data);
        temp
=temp->next;
    }
    printf(
"\n");
}

int InsertIntoSortedList(NodeType * head, int x)
{
 NodeType 
* f,*r,*temp;
 f
=head;
 r
=head->next;
 
while(r!=NULL)
  {
    
if(r->data>=x)
    {
      temp
=(NodeType *)malloc(sizeof(NodeType));
      temp
->data=x;
      temp
->next=r;
      f
->next=temp;
      printf(
"\n链表中插入元素%d",x);
      
return 1;
    }
    
else
    {
     f
=r;
     r
=r->next;
    }
  }
  temp
=(NodeType *)malloc(sizeof(NodeType));
  temp
->data=x;
  temp
->next=NULL;
  f
->next=temp;
  printf(
"\n链表中插入元素%d",x);
  
return 1;
  
}

void main()
{
 NodeType 
*head,*head2;
 
//DataType x[5]={1,2,3,4,5};
 DataType y[5]={8,7,6,5,4};
 
//head=InitialLinkList();
 head2=InitialLinkList();
 CreateLinkListInHead(head2,y,
5);
 
//CreateLinkListInRear(head,x,5);
 PrintIntegerLinkList(head2);
 
//PrintIntegerLinkList(head);
 if(SearchInLinkList(head2,88)!=NULL)
     printf(
"\nFound 88\n");
 
else
     printf(
"\nSearch 88,Not Found\n");
 
//InsertNumberIntoLinkList(head2,7,33);
 
//PrintIntegerLinkList(head2);

 InsertIntoSortedList(head2,
0);
 PrintIntegerLinkList(head2);

 InsertIntoSortedList(head2,
6);
 PrintIntegerLinkList(head2);

 InsertIntoSortedList(head2,
9);
 PrintIntegerLinkList(head2);
}

 

posted @ 2007-10-16 23:03 emanlee 阅读(...) 评论(...) 编辑 收藏