顺序表+单链表

代码如下;
//顺序表基本运算算法

#include <iostream>
#include <algorithm>
#include <malloc.h>
#define Maxsize 100
using namespace std;
typedef int Elemtype;
typedef struct
{
    Elemtype  data[Maxsize];
    int length;
} SqList;
void CreateList(SqList *&L,Elemtype a[],int n)//由a中的n个元素建立顺序表
{
    int i=0,k=0;
    L=(SqList *)malloc(sizeof(SqList));//memory allocate  内存分配
    while(i<n)
    {
        L->data[k]=a[i];
        k++;
        i++;

    }
    L->length=k;
}
void InitList(SqList *&L)//初始化线性表
{
    L=(SqList *)malloc(sizeof(SqList));
    L->length=0;//置空线性表的长度为0
}
void DestroyList(SqList *&L)//销毁线性表
{
    free(L);
}
bool ListEmpty(SqList *&L)//判断线性表是否为空表
{
    return(L->length==0);

}
int ListLength(SqList *&L)//求出线性表的长度
{
    return (L->length);

}
void DispList(SqList *&L)//输出线性表
{
    for(int i=0; i<L->length; i++)
    {
        cout<<L->data[i]<<" ";
    }
    cout<<endl;
}
bool GetElem(SqList *&L,int i,Elemtype &e)//求出线性表的某个元素的值
{
    if(i<1||i>L->length)
        return false;
    e=L->data[i-1];
    return true;
}
int locateElem(SqList *&L,Elemtype e)//按元素查找
{
    int i=0;
    while(i<L->length&&L->data[i]!=e)
        i++;
    if(i>=L->length)
        return 0;
    else return 1+i;
}
bool ListInsert(SqList *&L,int i,Elemtype &e)//插入数据元素
{
    int j;
    if(i<1||i>L->length+1)

        return false;
       i--;
       for(j=L->length;j>i;j++)
       {
           L->data[i]=L->data[j-1];
           L->data[i]=e;
           L->length++;
           return true;
       }
}
bool ListDelete(SqList *&L,int i,Elemtype &e)//删除数据元素
{
    int j;
    if(i<1||i>L->length+1)

        return false;
       i--;
       e=L->data[i];
       for(j=i;j<L->length-1;j++)
       {
           L->data[i]=L->data[j+1];
           L->length--;
           return true;
       }
}
int main()
{
    SqList *p;
    int n;
    InitList(p);
    Elemtype a[4]={1,2,3,4};
    CreateList(p,a,4);//创建顺序表
    //
    //DestroyList(p);
    //char o[5]=ListEmpty(p);
    //cout<<o<<endl;
    int length=ListLength(p);//求出顺序表的长度
    cout<<length<<endl;
    DispList(p);
    int y=locateElem(p,2);//查找元素
    cout<<y<<endl;
   //bool o=ListInsert(p,2,5);
   //cout<<o<<endl;
    //DispList(p);
}/*
//单链表基本运算算法
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
using namespace std;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;		//指向后继结点
} LinkNode;					//声明单链表结点类型
void CreateListF(LinkNode *&L,ElemType a[],int n)
//头插法建立单链表
{
    LinkNode *s;
    L=(LinkNode *)malloc(sizeof(LinkNode));  	//创建头结点
    L->next=NULL;
    for (int i=0; i<n; i++)
    {
        s=(LinkNode *)malloc(sizeof(LinkNode));//创建新结点s
        s->data=a[i];
        s->next=L->next;			//将结点s插在原开始结点之前,头结点之后
        L->next=s;
    }
}
void CreateListR(LinkNode *&L,ElemType a[],int n)
//尾插法建立单链表
{
    LinkNode *s,*r;
    L=(LinkNode *)malloc(sizeof(LinkNode));  	//创建头结点
    L->next=NULL;
    r=L;					//r始终指向终端结点,开始时指向头结点
    for (int i=0; i<n; i++)
    {
        s=(LinkNode *)malloc(sizeof(LinkNode));//创建新结点s
        s->data=a[i];
        r->next=s;			//将结点s插入结点r之后
        r=s;
    }
    r->next=NULL;			//终端结点next域置为NULL
}
void InitList(LinkNode *&L)
{
    L=(LinkNode *)malloc(sizeof(LinkNode));  	//创建头结点
    L->next=NULL;
}
void DestroyList(LinkNode *&L)//销毁单链表
{
    LinkNode *pre=L,*p=pre->next;
    while (p!=NULL)
    {
        free(pre);
        pre=p;
        p=pre->next;
    }
    free(pre);	//此时p为NULL,pre指向尾结点,释放它
}
bool ListEmpty(LinkNode *L)//判断单链表是否为空
{
    return(L->next==NULL);
}
int ListLength(LinkNode *L)//求出长度
{
    LinkNode *p=L;
    int i=0;
    while (p->next!=NULL)
    {
        i++;
        p=p->next;
    }
    return(i);
}
void DispList(LinkNode *L)//输出链表
{
    LinkNode *p=L->next;
    while (p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}
bool GetElem(LinkNode *L,int i,ElemType &e)
{
    int j=0;
    LinkNode *p=L;
    if (i<=0) return false;		//i错误返回假
    while (j<i && p!=NULL)
    {
        j++;
        p=p->next;
    }
    if (p==NULL)				//不存在第i个数据结点
        return false;
    else						//存在第i个数据结点
    {
        e=p->data;
        return true;
    }
}
int LocateElem(LinkNode *L,ElemType e)//查找
{
    LinkNode *p=L->next;
    int n=1;
    while (p!=NULL && p->data!=e)
    {
        p=p->next;
        n++;
    }
    if (p==NULL)
        return(0);
    else
        return(n);
}
bool ListInsert(LinkNode *&L,int i,ElemType e)
{
    int j=0;
    LinkNode *p=L,*s;
    if (i<=0) return false;			//i错误返回假
    while (j<i-1 && p!=NULL)		//查找第i-1个结点p
    {
        j++;
        p=p->next;
    }
    if (p==NULL)					//未找到位序为i-1的结点
        return false;
    else							//找到位序为i-1的结点*p
    {
        s=(LinkNode *)malloc(sizeof(LinkNode));//创建新结点*s
        s->data=e;
        s->next=p->next;			//将s结点插入到结点p之后
        p->next=s;
        return true;
    }
}
bool ListDelete(LinkNode *&L,int i,ElemType &e)
{
    int j=0;
    LinkNode *p=L,*q;
    if (i<=0) return false;		//i错误返回假
    while (j<i-1 && p!=NULL)	//查找第i-1个结点
    {
        j++;
        p=p->next;
    }
    if (p==NULL)				//未找到位序为i-1的结点
        return false;
    else						//找到位序为i-1的结点p
    {
        q=p->next;				//q指向要删除的结点
        if (q==NULL)
            return false;		//若不存在第i个结点,返回false
        e=q->data;
        p->next=q->next;		//从单链表中删除q结点
        free(q);				//释放q结点
        return true;
    }
}
int main()
{


    LinkNode *p,*q,*s,*head;
    head=(LinkNode*)malloc(sizeof(LinkNode));//要在主函数中动态分配存储空间,才能使用单链表。
    p=head;
    ElemType a[4]= {1,2,3,4};
    CreateListF(p,a,4);//头插法创建单链表
    DestroyList(p);//销毁单链表
    DispList(p);

    CreateListR(p,a,4);//尾插法创建单链表
    DispList(p);
    int length1=ListLength(p);//求出单链表的长度
    cout<<length1<<endl;
    int o=LocateElem(p,3);
    cout<<o<<endl;


}*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值