線性表的系列操作

本文章主要是對線性表的相關操作進行總結,以備複習:

#include <stdio.h>
#include <stdlib.h>
#define Maxsize 100

typedef int ElementType;
typedef struct LNode * List;
//定義一個線性表
struct LNode {
    ElementType data[Maxsize];
    int last;
};

List  L;           //創建一個指向線性表的指針
List MakeEmpty1();    //初始化線性表
int Find(ElementType x ,List L);  // 查找x第一次出現的下標
void Insert(ElementType x,int i,List L);  //在下標爲i的地方插入x
void Delete(int i, List L); // 刪除線性表中第i個位置的元素
ElementType  Findkth(int k, List L); // 返回下標爲k的當前值
int Length(List L);  // 返回線性表的長度

//初始化線性表
List MakeEmpty1()
{
    List L;
    L = (List)malloc(sizeof(struct LNode));
    L -> last = -1;
    return L;
}

// 按值查找
int Find(ElementType x,List L)
{
    int i = 0;
    while(i<=L->last && L->data[i]!=x)
        i++;
    if(L->last < i)
        return -1;
    else
        return i;
}

//插入操作
void Insert(ElementType x,int i,List L)
{
    if (L->last == Maxsize-1) {
        printf("表滿");
        return;
    }
    if(i<0|| i>L->last+1)
    {
        printf("位置不合理");
        return ;
    }
    for(int j = L->last;j>=i;j--)
    {
        L->data[j+1] = L->data[j];
    }
    L->data[i] = x;
    L-> last++;
}

// 刪除操作
void Delete(int i, List L)
{
    int j;
    if(i<0||i>L->last)
    {
        printf("位置在%d處不存在",i);
        return ;
    }
    for(j = i;j<=L->last;j++)
    {
        L->data[j]= L->data[j+1];
    }
    L->last--;

}

//順序查找
ElementType Findkth(int k, List L)
{
    if (k < 0||L->last<k)
    {
        printf("查找的數字不存在");
        return 0;
    }
    return L->data[k];
}

//表長
int Length(List L)
{
    return L->last+1;
}

int main()
{
    int i;
    L= MakeEmpty1();
    Insert(11,0,L);
    printf("在線性表L-Data[0]插入11\n");
    Insert(25,1,L);
    printf("在線性表L-Data[1]插入25\n");
    Insert(33,2,L);
    printf("在線性表L-Data[2]插入33\n");
    Insert(77,3,L);
    printf("在線性表L-Data[3]插入77\n");
    printf("此時的線性表爲:");
    for(i=0;i<Length(L);i++)
        printf("%d ",L->data[i]);
    printf("\n");
    printf("查找值爲12的下標是:%d\n",Find(2,L));
    printf("下標爲3的線性表的值是:%d\n",Findkth(3,L));
    Delete(2,L);
    printf("刪除線性表中下標爲2的元素\n");
    for(i=0;i<Length(L);i++)
        printf("%d ",L->data[i]);
    printf("\n");
    Delete(2,L);
    printf("刪除線性表中下標爲2的元素\n");
    printf("此時的線性表爲:");
    for(i=0;i<Length(L);i++)
        printf("%d ",L->data[i]);
    printf("\n");
    return 0;

}
發佈了9 篇原創文章 · 獲贊 8 · 訪問量 2910
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章