您的位置:首页 > 理论基础

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

2007-10-16 23:03 453 查看
实验二 参考源程序

/* 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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: