#include "stdio.h"
#define OK 1
#define ERROR 0
typedef int status;
typedef int elemtype; //元素为整型
typedef struct Node{ /* 定义单链表结点类型 */
elemtype data;
Node *next;
}Node,*LinkList; //定义单链表指针
/* 创建单链表*/
Node *creatList(LinkList L,int n)
{ int i; Node *r,*p;
L=new Node; //申请新结点,作为表头
L->next=NULL;
r=L;
for(i=1;i<=n; i++)
{ printf("i=%d",i);
p=new Node; //申请新结点,有数据的
printf("input node data:");
scanf("%d",&p->data); //输入新节点
p->next = NULL; //新节点的指针置为空
r->next=p;
r=p;
}
printf("\n creatList函数执行,链表创建成功\n");
return L; //返回链表的头指针
}
//---------输出----------
void output_L(LinkList L)
{
LinkList p;
p=L->next;
printf("链表结点如下:\n");
while(p!=NULL)
{ printf("%d ",p->data);
p=p->next;
}
printf("\n");}
//------------按位置插入 ------------------
int List_insert(LinkList L,int i,int e)
{ Node *p=NULL,*q,*s; int j=1;
if(i<1) { printf("出错!\n");return ERROR;}
p=L;
while(p&&(j<i))
{ p=p->next; j++;} //移动到插入位置i
if(!p) {printf("出错!\n");return ERROR;}
q=new Node; //申请新结点并插入
q->data=e;
q->next=p->next;
p->next=q;
return OK;
}
//----------删除单链表 -------------
int List_delete(LinkList L,int i)
{ LinkList p,q;
int j=1;
p=L;
if(i<1) return ERROR;
while((p->next!=NULL)&&(j<i))
{ p=p->next; j++; }
if(!p->next) return ERROR;
q=p->next;
p->next=q->next;
return OK;
}
//----------查找最小值-----------
int min_L(LinkList L){
int min;LinkList p;
p=L->next;
min=p->data;
while(p){
if(min>p->data){
min=p->data;
}
p=p->next;
}
return min;
}
void Input(int &n){
printf("输入结点数:");
scanf("%d",&n);
}
int main()
{
LinkList La;
int n,i,e,k;
Input(n);
La=creatList(La,n);
output_L(La);
int min=min_L(La); //填写代码实现调用
printf("min=%d\n",min); //输出最小值
printf("插入的位置i和值e,i=?,e=?\n");
scanf("%d%d",&i,&e);
printf("i=%d,e=%d\n",i,e);
List_insert(La,i,e); //在La的i位置插入e值
output_L(La);
printf("删除位置i=?\n");
scanf("%d",&i);
List_delete(La,i); //在La的i位置删除元素
output_L(La);
}