可不可以做一下我借鉴一下,数据结构没学好

img

img


数据结构没有好好学啊,让明天交但是我到现在还没有头绪,可不可以帮忙做一下我借鉴一下

按你的需求,实现代码如下:

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 1024 //定义顺序表的最大长度
#define TRUE 1
#define FALSE 0
typedef int datatype; //定义int的别名,或#define datatype int
typedef struct
{
    datatype elem[MAXSIZE];
    int length;      //表长 
}SeqList;    //定义顺序表抽象数据类型 
void init_List(SeqList* L)//顺序表的初始化 
{
    L->length = 0;
}
void creat_List(SeqList* L)//创建顺序表 
{
    int i;
    printf("请输入顺序表长度:\n");
    scanf("%d", &L->length);
    printf("请输入顺序表元素:\n");
    for (i = 0; i < L->length; i++)
    {
        scanf("%d", &L->elem[i]);
    }
}
void clear_List(SeqList* L)//清空顺序表
{
    L->length = 0;
}
int loc_List(SeqList* L, int local)//顺序表的按值查找 
{
    int i = 0;
    if (L->length == 0)//空表
        return FALSE;
    for (i = 0; i < L->length; i++)
    {
        if (L->elem[i] == local)//找到local
            return i + 1;//返回找到local的位置 
    }
    return 0;//遍历完顺序表没找到 
}
int ins_List(SeqList* L, int i, int data)//顺序表中第i个位置插入数据
{
    int j;//数据次序
    printf("在第%d个位置上插入数据%d\n", i, data);
    if (L->length == MAXSIZE)//原顺序表已满
    {
        printf("overflow\n");
        return FALSE;//溢出 
    }
    if (i < 1 || i > L->length)//位置不合适及检查是否为空表 
    {
        printf("error,please input the right i\n");//有返回值的函数也可以输出 
        return FALSE;
    }
    for (j = L->length; j >= i; j--)//第i-1个位置之后的数据都后移一位 
    {
        L->elem[j] = L->elem[j - 1];
    }
    L->elem[i - 1] = data;
    L->length++;//表长加一 
    return TRUE;
}
int del_List(SeqList* L, int i) //顺序表中删除第i个数据
{
    int    j; //数据次序 
    printf("删除第%d个位置上的数据\n");
    if (i < 1 || i > L->length)
        return FALSE;
    for (j = i; j < L->length; j++)
    {
        L->elem[j - 1] = L->elem[j];//第i个位置之后的数据都前移一个位置 
    }
    L->length--;//表长减一 
    return TRUE;
}
void print_List(SeqList* L)//输出顺序表 
{
    int i;
    if (L->length == 0)//判断空表 
        printf("表为空\n");
    for (i = 0; i < L->length; ++i)
    {
        printf("%d ", L->elem[i]);
    }
    printf("\n");
}
void menu(void)//菜单函数
{
    printf("\t\t***************顺序表的查找、插入、删除***************\n");//菜单 
    printf("\t\t||           a. 建立一个顺序表                      ||\n");//\t的作用是跳格,即跳到下一个“制表位置”(也有说是TAB位置),在我们所用的系统中一个“制表区”占8列。“下一制表位置”从第9列开始,
    printf("\t\t||           b. 顺序表中按值查找                    ||\n");
    printf("\t\t||           c. 在顺序表中第i个位置插入一个元素     ||\n");
    printf("\t\t||           d. 删除在顺序表中第i个位置的元素       ||\n");
    printf("\t\t||           e. 输出顺序表中的所有元素              ||\n");
    printf("\t\t||           f. 清空顺序表                          ||\n");
    printf("\t\t||           q. 退出程序                            ||\n");
    printf("\t\t******************************************************\n");
}
char menu_select(void)//菜单功能选择函数 
{
    char cmd;
    printf("\n请输入您选择功能的序号(a~e):\n");
    cmd = getchar();
    while ((cmd > 'a' && cmd < 'f') || (cmd == 'q'))
        return cmd;
}
void main()  //省略情况,默认为 int main() 
{
    SeqList* L;
    int i, local, data;
    char cmd;
    L = (SeqList*)malloc(sizeof(SeqList));//分配动态存储空间,创建顺序表;
    menu();
    do
    {
        cmd = 0;//初始化 
        switch (menu_select())//菜单选择,调用menu_select函数(printf语句实现,返回字符) 
        {
        case 'a':
            printf("\t\t****************建立一个顺序表************************\n");
            creat_List(L);
            getchar();//清除输入缓冲区的回车符 
            break;
        case 'b':
            printf("\t\t****************在顺序表中按值查找********************\n");
            printf("请输入需要查找的值:\n");
            scanf("%d", &local);
            printf("输出需要查找的值的位置i:\n");
            printf("%d\n", loc_List(L, local));
            fflush(stdin);//清除标准输入缓冲区。相当于getchar()清除输入缓冲区的回车符 
            break;
        case 'c':
            printf("\t\t************在顺序表中第i个位置插入一个元素***********\n");
            printf("请输入需要插入的位置i和数据:\n");
            scanf("%d%d", &i, &data);
            ins_List(L, i, data);
            getchar();
            break;
        case 'd':
            printf("\t\t************删除在顺序表中第i个位置的元素*************\n");
            printf("请输入需要删除的位置i:\n");
            scanf("%d", &i);
            del_List(L, i);
            getchar();
            break;
        case 'e':
            printf("\t\t****************输出顺序表中的所有元素****************\n");
            printf("输出顺序表所有元素:\n");
            print_List(L);
            getchar();
            break;
        case 'f':
            printf("\t\t**********************清空顺序表**********************\n");
            clear_List(L);
            getchar();
            break;
        case 'q':
            printf("\t\t***********************谢谢使用***********************\n");
            cmd = 'q';
            break;
        }

    } while (cmd != 'q');

    int wait = 1;
    scanf("%d", &wait);
}

运行结果如下:

img

那就翻开书认真看看数据结构,然后再做这个实验