数据结构实验(严蔚敏版)-----单链表

数据结构(严蔚敏版)配套实验报告册--单链表的基本操作

copy之前请先点赞!! 码字不易!!

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
//#define NULL 0

typedef int Status;
typedef int ElemType;

typedef struct LNode1
{
    ElemType data;
    struct LNode1 * next;
}LNode,* LinkList;   

void CreateList_L(LinkList &L,int n)
{//逆序输入n个元素的值,建立带表头结点的单链表L
    int i;
    LNode *p;
    L=(LinkList)malloc(sizeof(LNode));
    L->data=0;//存放表长
    L->next=NULL;
    printf("Please Input data\n");
    for(i=n;i>0;--i)
    {
        p=(LinkList)malloc(sizeof(LNode));
        scanf("%d",&p->data);
        p->next=L->next;
        L->next=p;
        L->data++;
    }

}
Status GetElem_L(LinkList L,int i,ElemType &e)
{//在带头结点的单链表中查找第i个结点
    LNode *p;
    int j;
    p=L->next;
    j=1;
    while(p&&j<i)
    { p=p->next;
      ++j;
    }
    if(!p||j>i)
      return ERROR;
    e=p->data;
    return OK;
}
Status ListInsert_L(LinkList &L,int i,ElemType e)
{//带头结点的单链表的插入
    int j;
    LNode *p,*s;
    p=L;j=0;
    while(p&&j<i-1)
    {p=p->next;++j;}
    if(!p||j>i-1)
      return ERROR;
    s=(LinkList)malloc(sizeof(LNode));
    s->data=e;
    s->next=p->next;
    p->next=s;
    L->data++;
    return OK;
}
Status ListDetele_L(LinkList &L,int i,ElemType &e)
{//带头结点的单链表的删除
    int j;
    LNode *p,*q;
    p=L;
    j=0;
    while(p->next&&j<i-1)
    {p=p->next;++j;}
    if((!p->next)||j>i-1)
    return ERROR;
    q=p->next;
    p->next=q->next;
    e=q->data;
    free(q);
    L->data--;
    return OK;
}
Status Traverse_L(LinkList L)
{//遍历链表
    LNode *p=L->next;
    printf("this list contains %d elements\n",L->data);
    while(p)
    {
      printf("%5d->",p->data);
      p=p->next;
    }
    printf("NULL\n");
    return OK;
}
int Length_L(LinkList L)
{//求链表的长度
    int len=0;
    LinkList p;
    p=L;
    while(p->next!=NULL)
    {len++;p=p->next;}
    return len;
}
Status Delete_Between(LinkList &L,ElemType mink,ElemType maxk)
{//删除元素递增排列的链表L中的值大于mink且小于maxk大的所有元素
    LinkList p,q,prev=NULL;
	if(mink>maxk)return ERROR;
	p=L;
	prev=p;
	p=p->next;
	while(p&&p->data<maxk)
		{if(p->data<=mink)
			{prev=p; p=p->next; }
		else
        {prev->next=p->next; q=p; p=p->next; free(q);L->data-- ;} 
        }
    return OK;
}
Status ListOppose_L(LinkList &L) {
	LinkList p,q;
	p=L;
	p=p->next;
    L->next=NULL;
	while(p){
		q=p; p=p->next; q->next=L->next; L->next=q; }
	return OK;
 }
int main()
{
    LinkList L;int n,i,i1,i2,e,e1,e2,j1,j2;
    printf("Please input the number in the list:");
    scanf("%d",&n);
    CreateList_L(L,n);
    Traverse_L(L);

    printf("the length is :%d\n",Length_L(L));
    printf("Get elem i:");
    scanf("%d",&i);
    GetElem_L(L,i,e);
    printf("the NO.%d elem is:%d\n",i,e);

    printf("Insert position:");
    scanf("%d",&i1);
    printf("Insert number:");
    scanf("%d",&e1);
    ListInsert_L(L,i1,e1);
    Traverse_L(L);
    
    printf("Delete position:");
    scanf("%d",&i2);
    ListDetele_L(L,i2,e2);
    Traverse_L(L);

    printf("\nDelete between(a,b):");
    scanf("%d,%d",&j1,&j2);
    printf("the result is:%d\n",Delete_Between(L,j1,j2));
    Traverse_L(L);
    printf("the length is :%d\n",Length_L(L));
	printf("the result is:%d\n",ListOppose_L(L));
    Traverse_L(L);
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值