数据结构|课设-顺序表

顺序表

在原基础上添加了一些小功能,也看过比较全面的对表的操作,这里只实现了一些

1) 插入一个配送信息
2) 查询一个配送信息
3) 按序号插入一个配送信息
4) 删除一个配送信息
5) 显示所有配送信息
6) 读入文件
7) 退出
最基础但也最重要:建立空表

#include "stdio.h"
#include "String.h"
#define MaxSize 20
#define OverFlow -1
#define OK 1
#define Error -1

    typedef struct 
    {
         char num[7];   /*序号*/
         char id[10];    /*配送编号*/
         char name[10];    /*姓名*/
         char addr[20]; /*地址*/
     }ElemType;

    typedef struct 
    {
        ElemType Element[MaxSize];
        int Length;     /*线性表的长度*/
    }SeqList;          /*说明List数据类型*/

   void Init_SeqList(SeqList *L)          /*构造一个空表*/
    {
      L ->Length =0;
    }
  1. 插入一个配送信息
    int Insert_Last(SeqList *L,ElemType x);
    先判断表是否已满,如果未满,则在表尾插入信息,后长度加一
 int  Insert_Last(SeqList *L,ElemType x)
    {
       if  (L->Length==MaxSize)
        {   printf("表满");
            return OverFlow;
        }
        else
        {   /*在表尾插入一个配送数据*/
       
           L->Element[L->Length]=x;

           L->Length ++ ;  /*线性表长度加1*/
        return OK;             /*插入成功,返回*/
        }
    }

2.查询一个配送信息

从头开始找,比较姓名信息是否相同

 int Location_SeqList(SeqList *L, char *x)/*查找指定姓名的配送数据*/
    {
        int i=0;
        while(i< L ->Length && strcmp(L ->Element[i] .name,x))
            i++;
        if (i== L ->Length)  return -1;  /*查找失败*/
        else  return i+1;    /*返回x的逻辑位置 */
	}


3.按序号插入一个配送信息
int Insert2_SeqList(SeqList *L,int i,ElemType x);
从表尾开始,将前一个的信息赋给后一个,一直到要插入序号处
将要插入的新的信息赋值给插入序号处
这里将插入的序号等同于第几个信息了
(也就是说第一个信息序号相当于1)

int Insert2_SeqList(SeqList *L,int i,ElemType x)
	{
		int j;
		for(j=L->Length;j>=i;j--)
			L->Element[j]=L->Element[j-1];
		L->Element[i-1]=x;
		L->Length++;
		printf("插入成功\n");
		return OK;
	}

4.删除一个配送信息
int Delete_SeqList(SeqList * L, int i);
先判断是否有第i个元素
如果有,从第i-1号元素开始,所有元素都往前(往左)移动一位,长度减一

 int  Delete_SeqList(SeqList * L, int i)/*删除线性表的第i个元素*/
    {
        int  j;
        if(i<1 || i> L ->Length)  /*判断参数的正确性*/
        {
            printf ("不存在第i个元素");
            return Error ;
        }
        for(j=i-1;j<=L ->Length-1; j++)      /*删除*/
            L ->Element[j]= L ->Element[j+1]; /*向左移动*/
        L ->Length--;                         /*线性表长度减1*/
		printf("删除成功\n");
        return  OK ;
    }

5.显示所有配送信息
void Show_SeqList(SeqList * L) ;
先判断是否为空表,不为空则从头开始挨个输出

void Show_SeqList(SeqList * L)  /*遍历线性表*/
    {   int  j;
        printf("\n");
        if (L ->Length==0)
            printf("空表(NULL)!\n");
        else
          for(j=0;j< L ->Length; j++)              /*显示*/
            printf(" %7s  %10s  %10s  %7s  \n ",
            L->Element[j].num, L->Element[j].id,
            L->Element[j].name, L->Element[j].addr);
            printf("\n");
    }

6.读入文件
这是个老问题了,就不多说啦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值