c语言实现顺序表

#include <stdio.h>
#include <stdlib.h>
//顺序表的最大容量
#define MAXLISTSIZE 1024


typedef struct {
    int data[MAXLISTSIZE];
    int last;
} linearlist;

/*
 打印顺序表
 */
void ListList(linearlist *list)
{
    int i;
    printf("当前线性表的状态:\n");
    if(list -> last == 0)
    {
        printf("当前顺序表为空\n");
    }
    else
    {
        //遍历整个顺序表
        for(int i = 0; i < (list ->last); i++)
        {
            printf("%d ",list ->data[i]);
        }
        printf("\n");
    }
    
}

/*
 屏幕输出
 */
void Output(linearlist *list)
{
    system("cls");
    printf("顺序表\n");
    printf("a:追加一个节点\n");
    printf("i:插入一个节点\n");
    printf("d:删除一个节点\n");
    printf("e:退出\n");
    ListList(list);
}

/*
 创建顺序表
 */
linearlist* CreateList()
{
    linearlist * list = (linearlist*)malloc(sizeof(linearlist));
    list -> last = 0;
    return list;
}

/*
 在顺序表末尾添加节点
 */
void AppendNode(linearlist *list,int n)
{
    if(list ->last < MAXLISTSIZE)
    {
        list -> data[list -> last] = n;
        list -> last += 1;
    }
}

/*
 在指定位置插入节点
 */
void InsertNode(linearlist *list,int n,int pos)
{
    int j;
    if(pos  < 0|| pos > list ->last )
    {
        printf("所插入的位置超出顺序表的范围\n");
    }
    else
    {
        for(j = list -> last; j >= pos; j--)
        {
            list ->data[j + 1] = list -> data[j];
        }
        list -> data[pos] = n;
        list -> last++;
    }
}

/*
 删除指定位置的节点
 */
void DeleteNode(linearlist * list,int pos)
{
    int j;
    if((pos < 0) || (pos > list -> last))
    {
        printf("所要删除的位置超过顺序表的范围\n");
    }
    else
    {
        for(j = pos; j < list -> last; j++)
        {
            list ->data[j] = list -> data[j + 1];
        }
        list -> last --;
    }
}



int main()
{
    int key ,pos;
    char ch;
    linearlist *list;
    list = CreateList();
    while(1)
    {
        Output(list);
        ch = getchar();
        fflush(stdin);
        switch (ch) {
            case 'a':
                printf("请输入要追加的数据:\n");
                scanf("%d",&key);
                AppendNode(list,key);
                break;
            case 'i':
                printf("请输入要插入的数据的位置:\n");
                scanf("%d",&pos);
                printf("请输入要插入的数据:\n");
                scanf("%d",&key);
                InsertNode(list,key,pos);
                break;
            case 'd':
                printf("请输入要删除的数据的位置:\n");
                scanf("%d",&pos);
                DeleteNode(list,pos);
                break;
            case 'e':
                exit(0);
                Output(list);
                fflush(stdin);
                break;
            default:
                break;
        }
    }
    return 0;
}

点赞