线性表的创建和操作

简介: //对顺序表的操作 #include #include #include #define MAXSIZE   1000 typedef char ElemType; typedef struct {  ElemType data[MAXSIZ...

//对顺序表的操作
#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;
}

相关文章
|
2月前
|
存储 C语言
数据结构之线性表的初始化及其操作
数据结构之线性表的初始化及其操作
37 0
|
3月前
|
存储 索引
数据结构练习之线性表定义与操作
有限序列:这意味着序列的长度是固定的,不会无限延伸,这与计算机资源的限制相符。在实际应用中,数据结构的大小通常是有限制的,因为内存和存储资源是有限的。
42 4
|
存储 C语言 开发者
顺序表操作详解
顺序表操作详解
|
存储
数据结构 2.1 线性表的定义和基本操作
数据结构 2.1 线性表的定义和基本操作
65 0
06 顺序表操作
06 顺序表操作
26 0
|
人工智能 C语言
线性表的定义和基本操作
线性表的定义和基本操作
141 0
|
人工智能
线性表的定义和基本操作(三)
线性表的定义和理解,和一些基本的操作,并且有例题
104 0
|
存储 人工智能 Java
数据结构—线性表的定义与基本操作【插入、删除、查找】(上)
数据结构—线性表的定义与基本操作【插入、删除、查找】
614 0
数据结构—线性表的定义与基本操作【插入、删除、查找】(上)
|
存储 人工智能 算法
数据结构—线性表的定义与基本操作【插入、删除、查找】(下)
数据结构—线性表的定义与基本操作【插入、删除、查找】
485 0
数据结构—线性表的定义与基本操作【插入、删除、查找】(下)
|
算法
实验报告 线性表的基本操作及应用(单链表的创建,插入、删除、查找和打印算法)
实验报告 线性表的基本操作及应用(单链表的创建,插入、删除、查找和打印算法)
499 0
实验报告 线性表的基本操作及应用(单链表的创建,插入、删除、查找和打印算法)