线性表

这篇个人学习笔记详细探讨了线性表的概念,包括无序和有序顺序表的合并,以及顺序表的基本操作。接着介绍了链表,特别是单链表的操作和实现。此外,还涵盖了栈的两种实现方式——顺序栈和链栈,以及队列的顺序存储和链式存储结构。
摘要由CSDN通过智能技术生成

个人学习笔记


顺序表

#define LIST_INIT_SIZE 100
#define LIST_INCREAMENT 10


typedef enum Status
{
success,fail,fatal,range_error
}Status;

typedef int ElemType;

typedef struct SqList
{
    ElemType *elem;
    int length;
    int list_size;
}SqList, *Ptr;

typedef Ptr SqListPtr;

1. 合并无序顺序表

Status List_Union (SqListPtr La, SqListPtr Lb)      //时间复杂度O(n^2)
{
  ElemType elem;
  Status status;
  int i, j, len = List_Size(Lb);
  for (i = 1; i <= len; i ++)
  {
    List_Retrieve (Lb, i, &elem);
    status = List_Locate(La, elem, &j);
    if (status != success)
    {
      status = List_Insert (La, 1, elem);
      if (status != success) break;      //插入失败则退出
    }
    else List_Add (La, j, 1);
  }
  return status;
}

2. 合并有序顺序表

Status List_Merge (SqListPtr La, SqListPtr, SqListPtr Lc)      //时间复杂度O(n+m)
{
  ElemType elem1, elem2;
  Status status = List_Init(Lc);
  int i = 1, j = 1, k = 1;
  int n = List_Size(La), m = List_Size(Lb);
  while (i <= n && j <= m)
  {
    List_Retrieve (La, i, &elem1);
    List_Retrieve (Lb, j, &elem2);
    if (elem1 < elem2) { status = List_Insert (Lc, k, elem1); i = i + 1; }
    else { status = List_Insert (Lc, k, elem2); j = j + 1; }
    k = k + 1;
  }
  while (i <= n)       //表La还未处理完
  {
    List_Retrieve (La, i, &elem1);
    status = List_Insert (Lc, k, elem1);
    i = i + 1;
    k = k + 1;
  }
  while (j <= m)      //表La还未处理完
  {
    List_Retrieve (La, j, &elem2);
    status = List_Insert (Lc, k, elem2);
    j = j + 1;
    k = k + 1;
  }
  return status;
}

3. 顺序表的基本操作

//头文件
#pragma once
#define bool int
#define LIST_INIT_SIZE 100
#define LIST_INCREAMENT 10

typedef int ElemType;

typedef enum Status
{
    success, fail, fatal, range_error
}Status;

typedef struct SqList
{
    ElemType *elem;
    int length;
    int list_size;
}SqList, *Ptr, *SqListPtr;

Status List_Init(SqListPtr L);
void List_Destroy(SqListPtr L);
void List_Clear(SqListPtr L);
bool List_Empty(SqListPtr L);
int List_Size(SqListPtr L);
Status List_Retrival(SqListPtr L, int pos, ElemType *elem);
Status List_Locate(SqListPtr L, ElemType elem, int *pos);
Status List_Insert(SqListPtr L, int pos, ElemType elem);
Status List_Delete(SqListPtr L, int pos);
Status List_Prior(SqListPtr L, int pos, ElemType *elem);
Status List_Next(SqListPtr L, int pos, ElemType *elem);
void List_Print(SqListPtr L);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值