【数据结构基础】顺序表

来源:互联网 发布:淘宝转化率如何计算 编辑:程序博客网 时间:2024/05/01 21:43

前言 :

大一学习c语言时,接触到数据结构的单链表,当时觉得太难了(现在也觉得好难)。特别是在c语言期末课程设计时,当时指针、结构体还没掌握。在寝室里一会用vc6++跑跑,一会Dev c++跑跑,花了大约两天时间独立完成学生成绩管理系统的,用qq传了好多份给同组的同学,当时很用成就感,就像中学时花了好长时间解决了一道数学难题。突然有一种爸比天下第一的感觉,见谁都想抱抱!哈哈。特自负。今年大二,我很水的大学,开设了数据结构这门课程,我下定决心好好学习这门课程,每天早起,占前排。现在花点时间用博客记录自己的学习收获,当成是自己的课后复习的学习笔记吧!

顺序表知识点
1.1 初始化一个顺序表 Init_seqList
1.2 删除一项数据元素 Delete_seqList
1.3 检索一项数据元素 Location_seqList
1.4 插入一项数据元素 Insert_seqList

1.1 Init_seqList

#include<stdio.h>typedef struct node {    int date[10];    int length;}seqList, *PseqList;//下面的所有操作都以该结构体为栗子。PseqList Init_seqList(void) {    PseqList pl;    pl = (PseqList)malloc(sizeof(seqList));    if (pl) {        pl->length = 0;    }    return pl;}

1.2 Delete_seqList

int Delete_seqList(PseqList pl,int i) {//pl指向创建的顺序表,i表示要删除的位置    if (!pl) {        printf("表不存在");        return(-1);    }    if (i<1 || i> pl->length) {        printf("删除位置不合法");        return (0);    }    for (int j = i; j < pl->length;j++) {        pl->date[j] = pl->date[j + 1];    }    pl->length--;    return 1;}int Location_seqList(PseqList pl, int num) {    for (int i = 0; i < pl->length; i++) {        if (pl->date[i] == num)            return i;    }}

1.3 Location_seqList

int Location_seqList(PseqList pl, int num) {    for (int i = 0; i < pl->length; i++) {        if (pl->date[i] == num)            return i;    }}

1.4 Insert_seqList

Insert_seqList(PseqList pl, int x,int y) {    int i;    if (!pl) {        return -2;    }    if (pl->length > MAXSIZE) {        printf("表溢出");    }    if (x<1 || x>pl->length) {        printf("插入位置不合法");        return 0;    }    for (i = pl->length-1;i>x-1; i--) {        pl->date[i + 1] = pl->date[i];    }    pl->date[x] =y;    pl->length++;}

1.5 code

#include<stdio.h>#define MAXSIZE 6typedef struct node {    int date[MAXSIZE];    int length;}seqList, *PseqList;PseqList Init_seqList(void) {    PseqList pl;    pl = (PseqList)malloc(sizeof(seqList));    if (pl) {        pl->length =6;    }    printf("初始化为:");    for (int i = 0; i < pl->length; i++) {        pl->date[i] =i;        printf("%d", pl->date[i]);    }    printf("\n");    return pl;}PseqList Delete_seqList(PseqList pl,int i) {//pl指向创建的顺序表,i表示要删除的位置    if (!pl) {        printf("表不存在");    }    if (i<1 || i> pl->length) {        printf("删除位置不合法");    }    for (int j = i; j < pl->length-1;j++) {        pl->date[j] = pl->date[j + 1];    }    pl->length--;    printf("删除后为:");    for (int i = 0; i < pl->length; i++) {        printf("%d", pl->date[i]);    }    printf("\n");    return pl;}int Location_seqList(PseqList pl, int num) {    for (int i = 0; i < pl->length; i++) {        if (pl->date[i] == num)            return i;    }}int Insert_seqList(PseqList pl, int x,int y) {//x表示插入的位置,y表示插入的数字    int i;    if (!pl) {        return -2;    }    if (pl->length > MAXSIZE) {        printf("表溢出");    }    if (x<1 || x>pl->length) {        printf("插入位置不合法");        return 0;    }    for (i = pl->length-1;i>x-1; i--) {        pl->date[i + 1] = pl->date[i];    }    pl->date[x] = y;    pl->length++;    printf("\n");    printf("插入后:");    for (int j = 0; j < pl->length; j++) {        printf("%d", pl->date[j]);    }    printf("\n");    return 1;}void main() {    PseqList P=Init_seqList();    Delete_seqList(P,3);    int location = Location_seqList(P,5);    printf("location=%d位", location);    Insert_seqList(P,1,6);}

code修改后的…

#include<stdio.h>#include<stdlib.h>#include<time.h>#define size 20typedef struct node{    int data[size];    int length;}Lnode,*Pnode;//初始化顺序表Pnode Init_Seqlist(void){    Pnode H;    H=(Pnode)malloc(sizeof(Lnode));    if(H){        H->length=0;    }    return H;}//新建顺序表Pnode Build_Seqlist(Pnode H,int len){    if(len<=0 || len>=20){        printf("新建的链表长度不合法.");        return H;     }    for(int i=0;i<len;i++){        H->data[i]=rand()%100+1;        H->length++;    }       return H;}//求顺序表已用长度void Length_Seqlist(Pnode H){    printf("%d\n",H->length);} //打印顺序表void Print_Seqlist(Pnode H){    for(int i=0;i<H->length;i++){        printf("%d  ",H->data[i]);    }    printf("\n"); }//查找数据项int Find_Seqlist(Pnode H,int num){    for(int i=0;i<H->length;i++){        if(num==H->data[i]){            return i;        }    }    return -1;}//删除数据项(按位置)Pnode Delete_Seqlist(Pnode H,int position){    if(position<0 || position>=H->length){        printf("删除的位置不合法\n");        return H;     }    for(int i=position;i<H->length-1;i++){        H->data[i]=H->data[i+1];    }    H->length--;    return H;}//添加数据项 (按位置)Pnode Insert_Seqlist(Pnode H,int position,int num){    if(H->length>size){        printf("表已溢出\n");        return H;    }     if(position<0 || position>=H->length){        printf("插入的位置不合法\n");        return H;    }    for(int i=H->length-1;i>=position-1;i--){        H->data[i+1]=H->data[i];    }    H->data[position]=num;    H->length++;    return H;}int main(void){    Pnode H;    srand(time(NULL));    H=Init_Seqlist();//初始化     H=Build_Seqlist(H,rand()%10+1);//新建     printf("初始化新建为:\n");    Print_Seqlist(H);//打印     //查找某项数据项 //  int position=Find_Seqlist(H,rand()%100+1);//  if(position<0){//      printf("没找到\n"); //  }else{//      printf("找到的位置为:%d",position);//  } //  printf("------------------");    printf("删除后:\n");    H=Delete_Seqlist(H,rand()%10);    Print_Seqlist(H);//打印    printf("插入后:\n");     H=Insert_Seqlist(H,rand()%10,rand()%100+1);    Print_Seqlist(H);//打印      return 0;} 
1 0