顺序表 自我理解

xiaoxiao2022-06-11  14

    顺序表的实现比较简单些,顺序表可以用数组模拟 ,如果使用数组进行模拟,会比采用指针更简单,但是老师建议用指针来写,适合初学者回忆程序基本语法。

typedef struct list{ int data; int length; int *elem; }sqlist;

这一段的 typedef 我想了好久的,因为在之前老师说这是一个定义性函数,但是连着一个结构函数我就有些晕了。。(哭唧唧)

typedef struct list 指的是 用 list 来代替 struct 即 struct node==list node。

顺序表需要三个元素:{1.存取数据 2.存取长度,3.存取指针}

void Initerlist(sqlist &l) { l.elem=(int*)malloc(100*sizeof(int)); l.length=0; l.data=0; int i; for(i=0;i<l.length+1;i++) l.elem[i]=0; printf("线顺表初始化完成! \n"); return; }

最开始的初表是l.length=100的,但是我也不知道我抽了什么风。。。(呜呜),在写这个时我又在改自己的bug(挠头呀)

好了初始化后

void inserlist(sqlist &l) { int i,t; l.length+=1; //每次运行时长度总会先进行加一操作。 printf("请输入要插入的位置:\n"); cin>>i; if(i<1||i>l.length) //进行判断是否在表内。 { printf("输入错误!\n"); return; } printf("请输入要插入的数:\n"); cin>>t; int j; for(j=l.length-1;j>i-1;j--)//插入时,先进行i位置后的每一元素位置后移一个单位。 { l.elem[j]=l.elem[j-1]; } l.elem[i]=t; //输入插入元素. printf("%d",l.elem[i]); printf("插入完成!\n"); return; }

每一个表的最重要的地方就是表元素的插入与输出

插入问题有:1.如何进行相关位置操作而不影响之后的元素。   2. 如何对应其他的每一个元素应在的位置。

void coutlist(sqlist &l) { int i; if(l.length==0) { printf("顺序表为空!\n"); } if(l.length!=0) { for(i=1;i<=l.length;i++) { printf("%d ",l.elem[i]); } } return ; }

 

表的输出先进行判断表是否为空,若不为空,则进行输出操作。

 

其他的操作就没什么写的了,注重就是了解顺序表的插入与输出基本就可以了

一下是自己理解并询问大佬纯手工代码。。(头好冷啊!!)

#include<iostream> #include<stdio.h> #include<stdlib.h> using namespace std; const int list_add=10; const int list_size=100; typedef struct list{ int data; int length; int *elem; }sqlist; void Initerlist(sqlist &l) { l.elem=(int*)malloc(100*sizeof(int)); l.length=0; l.data=0; int i; for(i=0;i<l.length+1;i++) l.elem[i]=0; printf("线顺表初始化完成! \n"); return; } void cleanlist(sqlist &l) { l.length=0; printf("线顺表清空完成!\n"); return; } void getlengh(sqlist &l) { int t=l.length; printf("该顺序表的长度为:%d \n",t); return; } void inserlist(sqlist &l) { int i,t; l.length+=1; printf("请输入要插入的位置:\n"); cin>>i; if(i<1||i>l.length) { printf("输入错误!\n"); return; } printf("请输入要插入的数:\n"); cin>>t; int j; for(j=l.length-1;j>i-1;j--) { l.elem[j]=l.elem[j-1]; } l.elem[i]=t; printf("%d",l.elem[i]); printf("插入完成!\n"); return; } void deletelist(sqlist &l) { int i; printf("请输入要删除的位置:"); cin>>i; if(i<1||i>l.length) { printf("输入错误!\n"); return; } for(int j=i+1;j<=l.length;j++) { l.elem[j]=l.elem[j+1]; } l.length--; printf("删除完成!\n"); return; } void prolist(sqlist &l) { int i; printf("请输入位置:"); cin>>i; if(i<2||i>l.length) { printf("输入错误!\n"); return; } printf("该元素的前驱为:%d",l.elem[i-1]); return; } void nextlist(sqlist &l) { int i; printf("请输入位置:"); cin>>i; if(i<1||i>l.length) { printf("输入错误!\n"); return; } printf("该元素的后驱为:%d",l.elem[i+1]); return; } void getelem(sqlist &l) { int i; printf("请输入要显示的位置:"); cin>>i; if(i<1||i>l.length) { printf("输入错误!\n"); return; } printf("该位置的数为%d",l.elem[i]); return ; } void coutlist(sqlist &l) { int i; if(l.length==0) { printf("顺序表为空!\n"); } if(l.length!=0) { for(i=1;i<=l.length;i++) { printf("%d ",l.elem[i]); } } return ; } void showlist() { cout<<"0.初始化线性表"<<endl; cout<<"1.清空线性表"<<endl; cout<<"2.求线性表长度"<<endl; cout<<"3.获取线性表指定位置元素"<<endl; cout<<"4.求前驱"<<endl; cout<<"5.求后继"<<endl; cout<<"6.在线性表指定位置插入元素"<<endl; cout<<"7.删除线性表指定位置元素"<<endl; cout<<"8.显示线性表"<<endl; cout<<"输入负数退出"<<endl; } int main(int argc,const char *argv[]) { int c; sqlist l; while(1) { system("cls"); showlist(); cout<<"请输入操作数字:"<<endl; cin>>c; if(c<0) { printf("操作结束!\n"); return 0; } switch(c) { case 0: { Initerlist(l); break; } case 1:{ cleanlist(l); break; } case 2:{ getlengh(l); break; } case 3:{ getelem(l); break; } case 4: { prolist(l); break; } case 5: { nextlist(l); break; } case 6: { inserlist(l); break; } case 7: { deletelist(l); break; } case 8: { coutlist(l); break; } case 9: { return 0; break; } } getchar(); getchar(); } return 0; }

 

转载请注明原文地址: https://www.6miu.com/read-4931542.html

最新回复(0)