单链表的基本操作(书)

#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);
 }   

posted @ 2021-11-18 20:28  一只狗狗  阅读(41)  评论(0)    收藏  举报