【数据结构】顺序表的创建、逆置、遍历(C语言实现)

程序代码:

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

#define MAXSIZE 100

#define num 10

typedef int Elemtype;

typedef struct{

    Elemtype *data;

    int length;

}SqList;

SqList InitList(){

    SqList L;

    L.data=(Elemtype *)malloc(sizeof(Elemtype)*MAXSIZE);

    if(L.data==NULL){

         printf("动态空间分配失败!\n");

         exit(1);

    }

    L.length=0;

    return(L);

}

int Insert(SqList &L,int i,Elemtype x){

    if(i<1||i>L.length+1) return 0;

    if(L.length==MAXSIZE) return 0;

    for(int j=L.length-1;j>i-1;j--){

         L.data[j+1]=L.data[j];

    }

    L.data[i-1]=x;

    L.length++;

    return 1;

}

void Traverse(SqList L){

    for(int i=0;i<L.length;i++){

         printf("\t%d",L.data[i]);

    }

}

void Create(SqList &L){

    int i,x;

    for(i=1;i<=num;i++){

         x=rand();

         Insert(L,i,x);

    }

}

void Reverse(SqList &L){

    int i,j,k;

    for(i=0,j=(L.length-1);j>i;i++,j--){

         k=L.data[i];

         L.data[i]=L.data[j];

         L.data[j]=k;

    }

}

void main(){

    int i=1;

    SqList L=InitList();

    while(i!=0){

         printf("\n    Linked List Example \n");

         printf("1.Create 10 random number;\n");

         printf("2.Reverse the Linked List;\n");

         printf("3.Traverse the Linked List;\n");

         printf("0.Exit the program;\n");

         printf("Please input your selection(0-3):");

         scanf("%d",&i);

         switch(i){

         case 0:exit(0);

         case 1:Create(L);break;

         case 2:Reverse(L);break;

         case 3:Traverse(L);break;

         default:printf("input error!please select again!");

         }

    }

}

运行截图:

实验小结

理解动态数组与静态数组的区别

(1)静态数组在内存中位于栈区,是在定义时就已经在栈上分配了固定大小,在运行时这个大小不能改变,如:int a[10];

动态数组是malloc或者new出来的,位于内存的堆区,它的大小是在运行时给定,并且可以改变其,如:

    int *a;

    int  m_num = 10;  

    a = new int[m_num ];

(2)静态数组的大小是在编译期间就确定,并且分配的,其内存在使用结束后由计算机自动释放,效率高;动态数组是在程序运行时,由程序员根据实际需要从堆内存中动态申请的,使用结束后由程序员进行释放,效率低。

(3)在函数内部声明的静态数组不可能通过函数返回,因为生存期的问题,函数调用完其内部变量占用的内存就被释放了。如果想通过函数返回一个数组,可以在函数中用new动态创建该数组,然后返回其首地址。静态数组是在栈中申请的,而函数中的局部变量也是在栈中的,而new动态数组是在堆中的分配的,所以函数返回后,栈中的申请的内存被自动释放,而堆中申请的内存如果没有delete就不会自动释放。

区分“=”与“==”

二者的含义不同,“=”是赋值号;“==”是条件判断语句中是否相等的意思。

二者的作用不同,“=”的作用是将一个表达式的值赋给一个左值。一个表达式或者是一个左值,或者是一个右值。所谓左值是指一个能用于赋值运算左边的表达式。左值必须能够被修改,不能是常量。我们用变量作左值,还可以看到,指针和引用也可以作左值。“==”当左边的内容与右边的内容相同时,返回1。其余时候返回0。“==”是判断两个值大小是否相同的运算符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃头鸭鸭鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值