数据结构与算法-有序单链表的插入

//单链表基本操作
#include
#include
typedef int datatype;
typedef struct node{
datatype data;
struct node *next;
}Lnode,*linklist;

/******************************************/
/函数名称:creatbystack() /
/函数功能:头插法建立带头结点的单链表 /
/
**************************************/
linklist creatbystack()
{
linklist head,s;
datatype x;
head=(linklist)malloc(sizeof(Lnode));
head->next=NULL;
printf(“请输入若干整数序列(以0结束输入):\n”);
scanf("%d",&x);
while(x!=0)
{
s=(linklist)malloc(sizeof(Lnode));
s->data=x;
s->next=head->next;
head->next=s;
scanf("%d",&x);
}
return head;
}

//
/*函数名称:creatbyqueue() */
/*函数功能:尾插法建立带头结点的单链表 */
/
/
linklist creatbyqueue()
{
linklist head,r,s;
datatype x;
head=r=(linklist)malloc(sizeof(Lnode));
head->next=NULL;
printf(“请输入若干整数序列(以0结束输入):\n”);
scanf("%d",&x);
while(x!=0)
{
s=(linklist)malloc(sizeof(Lnode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return head;
}

/************************************/
/函数名称:print() /
/函数功能:输出带头结点的单链表 /
/
********************************/
void print(linklist head)
{
linklist p;
int i=0;
p=head->next;
while§
{
printf("%5d",p->data);
i++;
if(i%10==0) printf("\n");
p=p->next;
}
printf("\n\n");
}

//
/*函数名称:delList() */
/*函数功能:释放带头结点的单链表 */
/
/
void delList(linklist head)
{ linklist p=head->next;
while§
{ head->next=p->next;
free§;
p=head->next;
}
free(head);
}
//有序链表的插入,插入以后仍然有序
#include “slnklist.h”
void insert(linklist L,datatype x) { //链表的查找和插入
linklist p,p1,p2;
p=L->next;
p2=L;
p1=(linklist)malloc(sizeof(Lnode));
p1->data=x;
while(p!=NULL&&p->data p2=p2->next;
p=p->next;

}
if(p==NULL) {//插在数据后面 
	p2->next=p1;
	p1->next=NULL;

} else {//插在数据前面 
	p1->next=p;
	p2->next=p1;

}

}
int main() {
linklist h;//定义一个链表头指针
datatype x;
h=creatbyqueue(h);//创建链表
print(h);//打印链表
printf(“请输入需要插入的数值\n”);
scanf("%d",&x);
insert(h,x);//插入x
print(h);//打印并检验结果
return 0;
}

你可能感兴趣的:(数据结构与算法)