c语言 顺序表 学习记录

顺序表操作详解
SeqList.h
#ifndef SEQLIST_H_INCLUDED
#define SEQLIST_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxSize 20
typedef int DataType;
typedef struct
{
    int length;                 //顺序表长度
    DataType *data;     //元素指针
}SeqList;
int initSeqList(SeqList *L);   //初始化顺序表
int insertSeqList(SeqList *L,int i,DataType x);   //向顺序表插入
int deleteSeqList(SeqList *L,int i);       //从顺序表中删除
int updateSeqList(SeqList *L,int i,DataType x);  //在顺序表中修改
void printSeqList(SeqList *L);   //输出顺序表全部元素
int findSeqList(SeqList *L,DataType x);   //从顺序表中查找

#endif // SEQLIST_H_INCLUDED
SeqList.c
#include "SeqList.h"
/**********************************
 * 函数名:initSeqList()
 * 参数:SeqList *L
 * 功能:初始化顺序表
 * 返回值:int型
***********************************/
int initSeqList(SeqList *L)
{
    L->data = (DataType *)malloc(sizeof(DataType));
    if(!L->data)
        exit(-1);
    L->length = 0;
    return 1;
}
/**********************************
 * 函数名:insertSeqList()
 * 参数:SeqList *L,int i,DataType x
 * 功能:向表中插入一个元素
 * 返回值:int型
***********************************/
int insertSeqList(SeqList *L,int i,DataType x)
{
    int j;
    if(L->length>=MaxSize)
        printf("上溢\n");
    if(i<1 || i>L->length + 1)
        printf("位置非法\n");
    for (j = L->length; j >= i; j--)
		L->data[j] = L->data[j - 1];
	L->data[i - 1] = x;
	L->length++;
	return 1;
}
/**********************************
 * 函数名:deleteSeqList()
 * 参数:SeqList *L,int i
 * 功能:从表中删除一个元素
 * 返回值:int型
***********************************/
int deleteSeqList(SeqList *L,int i)
{
    if(L->length==0)
        printf("下溢\n");
    if(i<1 || i>L->length + 1)
        printf("位置非法\n");
	for (int j = i; j < L->length; j++)
		L->data[j - 1] = L->data[j];
	L->length--;
	return 1;

}
/**********************************
 * 函数名:updateSeqList()
 * 参数:SeqList *L,int i,DataType x
 * 功能:在表中修改一个元素
 * 返回值:int型
***********************************/
int updateSeqList(SeqList *L,int i,DataType x)
{
    if(i<1 || i>L->length + 1)
        printf("位置非法\n");
    L->data[i-1]=x;
    return 1;
}
/**********************************
 * 函数名:printSeqList()
 * 参数:SeqList *L
 * 功能:输出顺序表的全部元素
 * 返回值:无
***********************************/
void printSeqList(SeqList *L)
{
    int i;
    if(L->length==0)
        printf("顺序表为空!\n");
    else
    {
        for(i=0;i<L->length;i++)
        {
            printf("%d\t",L->data[i]);
        }
    }
    printf("\n");
}
/**********************************
 * 函数名:findSeqList()
 * 参数:SeqList *L,DataType x
 * 功能:在表中查找一个元素
 * 返回值:int型
***********************************/
int findSeqList(SeqList *L,DataType x)
{
    int i;
    DataType *p = L->data;
    for(i=0;i<L->length;i++,p++)
    {
        if(*p == x)
        {
            printf("找到值为%d的元素,其位置为%d\n", x, i+1);
            return 1;
        }

    }
    printf("在顺序表中没有找到值为%d的元素.\n", x);
    return 0;

}
main.c
#include "SeqList.h"

int main()
{
    int choice;
    int position;
    DataType data;
    SeqList *sl = (SeqList *)malloc(sizeof(SeqList));
    while(1)
    {
        printf("======顺序表操作演示=======\n");
        printf("1. 创建一个空的顺序表\n");
        printf("2. 输出顺序表的全部数据\n");
        printf("3. 查询数据在顺序表中的位置\n");
        printf("4. 向顺序表指定位置插入数据\n");
        printf("5. 删除顺序表指定位置的数据\n");
        printf("6. 更新顺序表指定位置的数据\n");
        printf("7. 退出程序\n");
        printf("===========================\n");
        printf("\n输入1-8,选择所需功能号:");
        scanf("%d", &choice);
        printf("\n您选择的功能号为:%d\n", choice);
        switch(choice)
        {
            case 1:
            {
                 if(initSeqList(sl))
                    printf("顺序表创建成功!\n");
                else
                    printf("顺序表创建失败!\n");
                break;
            }
            case 2:
            {
                printSeqList(sl);
                break;
            }
            case 3:
            {
                printf("请输入被查询数据:");
                scanf("%d",&data);
                findSeqList(sl,data);
                break;
            }
            case 4:
            {
                printf("请输入插入位置:");
                scanf("%d",&position);
                printf("请输入被插入数据:");
                scanf("%d",&data);
                if(insertSeqList(sl,position,data))
                    printf("插入数据成功\n");
                else
                    printf("插入数据失败\n");
                break;
            }
            case 5:
            {
                printf("请输入被删除数据的位置:");
                scanf("%d",&position);
                if(deleteSeqList(sl,position))
                    printf("删除数据成功\n");
                else
                    printf("删除数据失败\n");
                break;
            }
            case 6:
            {
                printf("请输入被修改数据的位置:");
                scanf("%d",&position);
                printf("请输入修改后的数据:");
                scanf("%d",&data);
                if(updateSeqList(sl,position,data))
                    printf("修改数据成功\n");
                else
                    printf("修改数据失败\n");
                break;
            }
            case 7:
            {
                exit(0);
                break;
            }
            default:break;
        }
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值