线性顺序表

顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构 ,C语言代码实现如下

#include <stdio.h>
#include <stdlib.h>
#define MAXLISTSIZE 1024 //数组大小


//定义一个数据结构
typedef struct {
    int data[MAXLISTSIZE];//存储的数据放在数组里,int类型 
    int last;//数组的内容大小
}LinearList;

LinearList* list;//定义全局LinearList*

void showList();
void outputDoc();
LinearList* createLinearList();
void appendNode();
void insertNode();
void delNode();
void operate();

void showList(LinearList* l) {
    printf("当前线性顺序表的状态:\n");
    if(l->last == 0) {
        printf("当前线性顺序表为null");
    } else {

        int i;
        for(i = 0; i < (l->last); i++) {
            printf("[%d]\t",l->data[i]);
        }
    } 
    printf("\n");
}

//打印说明文档
void outputDoc() {
    system("cls");
    printf("线性顺序表演示:\n");
    printf("a:追加一个节点;       i:插入一个节点\n");
    printf("d:删除一个节点;       e:退出\n");
}

//创建线性顺序表
LinearList* createLinearList() {
    LinearList* list = (LinearList*)malloc(sizeof(LinearList));//分配LinearList结构大小的内存,并转换为LinearList指针类型
    list->last = 0;//初始化数据(节点)大小 
    return list; 
} 



//追加数据
void appendNode(LinearList* list, int data) {
    if((list->last) < MAXLISTSIZE) {
        list->data[list->last] = data;
        list->last ++;
    }
} 

//插入数据,插入一个数据后,后面的数据全部向后移动一个节点 
void insertNode(LinearList* list, int data, int pos) {

    if(pos < 0 || pos > list->last || list->last == MAXLISTSIZE) {
        char ch;
        printf("所插数据超出范围!,q回到主界面!\n");
        while(1) {
            ch = getchar();
            if(ch == 'q') {
                operate();
            }
        }

    } else {
        int j;
        for(j = list->last; j >= pos; j--) {    //j >= pos ,把pos位置的也向后移动
            list->data[j+1] = list->data[j];    //循环后数组大小+1
        }
        list->data[pos] = data;     //数组默认从0开始,
        list->last++;
    } 
} 

//删除数据
void delNode(LinearList* list,int pos){
    if(pos < 0 || pos > list->last) {
        printf("所要删除的数据不在范围内!");
    } else {
        int j;
        for(j = pos; j < list->last; j++) { //j < list.last 
            list->data[j] = list->data[j+1];
        } 
        list->last--; 
    } 
}

//操作函数
void operate(){
    int data,pos;
     char ch;
        while(1) {
        outputDoc();
        showList(list);
        ch = getchar();
        switch(ch) {
            case 'a':
                printf("请插入数据:\n");
                scanf("%d",&data);
                appendNode(list,data);
                break;
            case 'i':
                printf("请输入要插入的位置:\n");
                scanf("%d",&pos);
                printf("请输入要插入的数据:\n");
                scanf("%d",&data);
                insertNode(list,data,pos);
                break;
            case 'd':
                printf("请输入要删除数据的位置:\n");
                scanf("%d",&pos);
                delNode(list,pos);
                break;
            case 'e':
                system("exit");
                break;
            default:
                printf("未知操作!\n");
                break;
         }
     }
}


//主函数 
int main() {
     list = createLinearList();
     operate();
     return 0;
}

运行之后

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值