• 线性表的创建和操作


    //对顺序表的操作
    #include<stdio.h>
    #include <stdlib.h>
    #include<malloc.h>
    #define MAXSIZE   1000

    typedef char ElemType;

    typedef struct
    {
     ElemType data[MAXSIZE];
     int length;
    }SqList;

    //初始化线性表
    void InitList(SqList*&L)
    {
     L=(SqList*)malloc(sizeof(SqList));
     L->length=0;
    }
    //销毁线性表
    void DestoryList(SqList*&L)
    {
     free(L);
    }
    //判断线性表是否为空
    int ListEmpty(SqList*L)
    {
     return(L->length==0);
    }
    //插入数据元素,起始位置为1
    int ListInsert(SqList*&L,int Position,ElemType item)
    {
     int j;
     if(Position<1||Position>L->length+1)
     {
      printf("元素插入失败,请检查输入的位置是否有错!\n");
      return 0;
     }
     Position--;
     for(j=L->length;j>Position;j--)
     {
      L->data[j]=L->data[j-1];
     }
     L->data[Position]=item;
     L->length++;
     printf("元素插入成功\n");
     return 1;
    }

    //替换第Position个元素的值
    int ListReplace(SqList*&L,int Position,ElemType item)
    {
     if(Position<1||Position>L->length)
     {
      printf("元素位序号错误! \n");
      return 0;
     }
     Position--;
     L->data[Position]=item;
     printf("元素存放成功!\n");
     return 1;
    }
    //删除数据元素
    int ListDelete(SqList*&L,int Position,ElemType &item)
    {
     int j;
     if(Position<1||Position>L->length)
     {
      printf("输入的位号有误!\n");
      return 0;
     }
     Position --;
     item=L->data[Position];
     for(j=Position;j<L->length-1;j++)
     {L->data[j]=L->data[j+1];}
     L->length--;
     return 1;
    }
    //输出线性表
    void DispList(SqList *L)
    {
     int i;
     if(ListEmpty(L))
     {
      printf("表空!\n");
      return;
     }
     for(i=0;i<L->length;i++)
      printf("%c ",L->data[i]);
     printf("\n");
    }

    //求线性表中某个数据元素值
    int GetElem(SqList*L,int Position,ElemType&item)
    {
     if(Position<1||Position>L->length)
     {return 0;}
     item=L->data[Position-1];
     return 1;
    }
    //求线性表的长度
    int ListLength (SqList*L)
    {
     return(L->length);
    }
    //按元素值查找
    int LocateElem(SqList*L,ElemType item)
    {
     int i=0;
     while(i<L->length&&L->data[i]!=item)i++;
     if(i>=L->length)
      return 0;
     else
      return i+1;
    }

    void clear()
    {
     system("pause");
     system("cls");
    }
    void showmenu()
    {
     
     printf("\n\n\n");
     printf("            --线性表的基本运算--           \n");
     printf("********************************************\n");
     printf("*     1---插入一个新元素到第i个位置        *\n");
     printf("*     2---删除第i个位置的元素              *\n");
     printf("*     3---存一个新元素到第i个位置          *\n");
     printf("*     4---显示顺序表中所有元素的值         *\n");
     printf("*     5---检索表中第i个元素                *\n");
     printf("*     6---求表的长度                       *\n");
     printf("*                                          *\n");
     printf("*     0---退出                             *\n");
     printf("********************************************");
     printf("\n请选择菜单号(0--6):");
    }

    void Charu()
    {
     SqList*L;
     InitList(L);//创建一个顺序表
     char choice='N';
     ElemType item;
     int Position;
     printf("请输入一个新元素的值:");
     flushall();
     scanf("%c",&item);
     printf("请输入插入的位置:");
     scanf("%d",&Position);
     ListInsert(L,Position,item);
    }

    void Shanchu()
    {
     char choice='N';
     ElemType item;
     int Position;

     SqList*L;
     InitList(L);//创建一个顺序表
     printf("请输入要删除的元素的位置序号:");
     scanf("%d",&Position);
     if(ListDelete(L,Position,item))
     {
      printf("删除的元素为%c\n",item);
     }
    }

    void Xiugai()
    {
     char choice='N';
     ElemType item;
     int Position;

     SqList*L;
     InitList(L);//创建一个顺序表

     printf("请输入一个新元素的值:");
     flushall();
     scanf("%c",&item);
     printf("请输入该元素的存放位置:");
     scanf("%d",&Position);
     ListReplace(L,Position,item);
    }

    void Jiansuo()
    {
     char choice='N';
     ElemType item;
     int Position;

     SqList*L;
     InitList(L);//创建一个顺序表
     printf("请输入元素的位序号:");
     scanf("%d",&Position);
     if(GetElem(L,Position,item))
     {
      printf("第%d个元素为:%c\n",Position,item);
     }
     else
     {
      printf("输入的位序号有误!\n");
     }
    }
    void LineOP()
    {
     char choice='N';
     ElemType item;
     int Position;

     SqList*L;
     InitList(L);//创建一个顺序表

     while(choice!='0')
     {
      showmenu();
      flushall();
      scanf("%c",&choice);
      switch(choice)
      {
      case'1':
       Charu();
       clear();
       break;

      case'2':
       Shanchu();
       clear();
       break;

      case'3':
       Xiugai();
       clear();
       break;

      case'4':
       DispList(L);
       clear();
       break;

      case'5':
       Jiansuo();
       clear();
       break;

      case'6':
       printf("线性表的长度为%d",ListLength(L));
       clear();
       break;

      case'0':
       printf("\n\t程序结束!\n");
       DestoryList(L);
       break;

      default:
       printf("\n\t选择错误,请重新输入!\n");
       break;
      }
     }
    }

    int main()
    {
     LineOP();
     return 0;
    }

  • 相关阅读:
    L298 猴子进化过程
    L296 EST 科技英语翻译-美学取向 (上)
    L295 how to turn down a job but keep a good relationship with the hiring manager
    L293 给地球降温
    2019.3.16错过的计算题-应用统计学
    L291
    L290 英语中级班-3月上
    L275 Climate Change Is Having a Major Impact on Global Health
    L273 NCAA
    leetcode 87 Scramble String ----- java
  • 原文地址:https://www.cnblogs.com/java20130723/p/3211571.html
Copyright © 2020-2023  润新知