#include <stdio.h>
#include <malloc.h>
#define N 5
typedef int datatype;
typedef struct link_node{
datatype info;
struct link_node *next;
}node;
/*****************************************************/
/* 函数功能:建立一个空的单链表 */
/* 函数参数:无 */
/* 函数返回值:指向node类型变量的指针 */
/* 文件名:slnklist.c,函数名:init() */
/******************************************************/
node *init() /*建立一个空的单链表*/
{
return NULL;
}
node *append()
{node *head,*q,*p;
datatype x;
int i;
q=head=(node *)malloc(sizeof(node));
scanf("%d",&x);q->info=x;
for(i=2;i<=5;i++)
{p=(node *)malloc(sizeof(node));
scanf("%d",&x);p->info=x;
q->next=p;
q=p;}
q->next=NULL;
return head;
}
/****************************************************/
/* 函数功能:输出单链表中各个结点的值 */
/* 函数参数:指向node类型变量的指针head */
/* 函数返回值:空 */
/* 文件名slnklist.c,函数名display() */
/*****************************************************/
void display(node *head)
{
node *p;
int tem; int i = 0, j = 0, k = 0, l = 0;
p=head->next;
while (p->next != NULL) {
tem = p->info;
p = p->next;
if (tem > p->info)
i ++;
else if (tem == p->info)
k ++;
else
l ++;
j ++;
}
if (i+k == j || l+k == j )
printf("yes");
else
printf("not");
}
/*****************************************************/
/* 函数功能:在单链表中查找第i个结点的存放地址 */
/* 函数参数:指向node类型变量的指针head,int型变量i*/
/* 函数返回值:指向node类型变量的指针 */
/* 文件名:slnklist.c,函数名:find() */
/*****************************************************/
node *find(node *head,int i)
{
int j=1;
node *p=head;
if(i<1) return NULL;
while(p&&i!=j)
{
p=p->next;j++;
}
return j;
}
/*****************************************************/
/* 函数功能:单链表第i个结点后插入值为x的新结点 */
/* 函数参数:指向node类型变量的指针head */
/* datatype 类型变量x,int型变量i */
/* 函数返回值:指向node类型变量的指针 */
/* 文件名:slnklist.c,函数名:insert() */
/*****************************************************/
node *insert(node *head,datatype x,int i)
{
node *p,*q;
q=find(head,i);/*查找第i个结点*/
if(!q&&i!=0)
printf("/n找不到第%d个结点,不能插入%d!",i,x);
else{
p=(node*)malloc(sizeof(node));/*分配空间*/
p->info=x;/*设置新结点*/
if(i==0){/* 插入的结点作为单链表的第一个结点*/
p->next=head; /*插入(1)*/
head=p; /*插入(2)*/
}
else {
p->next=q->next;/*插入(1)*/
q->next=p;/*插入(2)*/
}
}
return head;
}
/*****************************************************/
/* 函数功能:在单链表中删除一个值为x的结点 */
/* 函数参数:指向node类型变量的指针head */
/* datatype 类型变量x */
/* 函数返回值:指向node类型变量的指针 */
/* 文件名:slnklist.c,函数名:dele() */
/*****************************************************/
node *dele(node *head,datatype x)
{
node *pre=NULL,*p;
if(!head) {printf("单链表是空的!");return head;}
p=head;
while(p&&p->info!=x)/*没有找到并且没有找完*/
{pre=p;p=p->next;}/*pre指向p的前驱结点*/
if(!pre&&p->info==x)/*要删除的是第一个结点*/
head=head->next;/*删除(1)*/
else
pre->next=p->next;
free(p);
return head;
}
void main()
{node *L;
L=init();
L=append();
display(L);
getch();
}
小字体的代码可以删掉的,本我初学。和大家一起分享,有更好的方法的,还望多多指点!