数据结构算法——顺序表

来源:互联网 发布:2017淘宝规则变更 编辑:程序博客网 时间:2024/04/29 09:17

今天看了贺利坚老师的一篇关于数据结构中顺序表的基本操作,看明白了,于是手痒想按照自己的思路写写,其中有不少错误,记个笔记。

代码如下:

头文件:list.h

#ifndef LIST_H#define LIST_H#define MAXSIZE 50//顺序链表结构体typedef struct{    int data[MAXSIZE];//链表元素    int length;//长度}sqlist;void creat_list(sqlist *ps,int arr[],int n);//用数组创建线性链表void init_list(sqlist *ps);//初始化线性链表void destory_list(sqlist *ps);//销毁线性链表void empty_list(sqlist *ps);//判断链表是否为空void length_list(sqlist *ps);//求线性链表的长度void travel_list(sqlist *ps);//遍历线性链表void get_data(sqlist *ps,int i);//求某个数据元素的值void locate_data(sqlist *ps,int e);//根据数据查找数据所在位置void insert_list(sqlist *ps,int i,int e);//插入元素void delete_list(sqlist *ps,int i,int e);//删除元素#endif

功能函数文件:list.c

//功能函数#include <stdio.h>#include <stdlib.h>#include "list.h"//用数组创建线性链表void creat_list(sqlist *ps,int arr[],int n){    int i=0;    for(i=0;i<n;i++)    {        ps->data[i]=arr[i];    }    ps->length=n;}//初始化线性链表void init_list(sqlist *ps){    ps=(sqlist *)malloc(sizeof(sqlist));//为线性链表分配存储空间    ps->length=0;}//遍历线性链表void travel_list(sqlist *ps){    int i=0;    for(i=0;i<ps->length;i++)    {           printf("%d ",ps->data[i]);    }       printf("\n");}//销毁线性链表void destory_list(sqlist *ps){    free(ps);    ps=NULL;}//判断是否为空表void empty_list(sqlist *ps){    if(ps->length==0)    {           printf("链表为空\n");    }       else    {           printf("链表不为空\n");    }   }//求线性标的长度void length_list(sqlist *ps){    printf("线性表长为%d\n",ps->length);}//求某个数据元素的值void get_data(sqlist *ps,int i){    if(i>1&&i<ps->length)    {        printf("第%d个元素是%d\n",i,ps->data[i-1]);    }}//求元素所在的位置void locate_data(sqlist *ps,int e){    int i=0;    while(i<ps->length && e!=ps->data[i])    {        i++;    }    printf("元素%d是第%d个\n",e,i+1);}//插入元素void insert_list(sqlist *ps,int i,int e){    int j;    i--;    for(j=ps->length-1;j>=i;j--)    {        ps->data[j+1]=ps->data[j];    }    ps->data[i]=e;    ps->length++;}//删除元素void delete_list(sqlist *ps,int i,int e){    int j;    i--;    e=ps->data[i];    printf("删除的元素是%d\n",e);    for(j=i;j<ps->length;j++)    {        ps->data[j]=ps->data[j+1];    }    ps->length--;}

测试函数:main.c

#include "list.h"#include <stdio.h>#include <stdlib.h>int main(){    //sqlist *ps;//这是我一开始写的,函数参数传的是ps,结果运行后提示段错误,原因是这种参数传递是值传递,而我没有给指针赋值,导致实际参数传进函数的时候没有修改实际的指针。    //sqlist sq;//这是后来写的,实参给&sq就可,    sqlist *ps=(sqlist *)malloc(sizeof(sqlist));//这是最后用的,值传递的是动态内存的地址,所有实际对地址操作。    int arr[]={5,8,10,12,34,62};    creat_list(ps,arr,6);    travel_list(ps);    empty_list(ps);//非空    locate_data(ps,10);    get_data(ps,4);    insert_list(ps,4,15);    travel_list(ps);    delete_list(ps,4,0);    travel_list(ps);    destory_list(ps);    return 0;}
上述参数的传递也可以用二级指针,我自己试过了,发现自己对指针的传递方面还有不足,多看看吧。最后谢谢我同学的帮助,Thanks,鸡sir。

0 0
原创粉丝点击