计算机内部存储一张线性表(线性结构的数表),最简单方便的方法就是用一组连续地址的内存单元来存储整张线性表。
顺序表的特征:
1)有一个唯一的表名来标识该顺序表;
2)内存单元连续存储,也就是说,一张顺序表要占据一块连续的内存空间;
3)数据顺序存放,元素之间有先后关系
注意:数组本身就是一张顺序表。
顺序表的定义:
两种定义顺序表的方法:静态定义一张顺序表;动态生成一张顺序表。
静态地定义一张顺序表的方法与定义一个数组的方法类似。
向顺序表中插入、删除元素、
————————————————————————————————————————
________________________________________________________
实例:
创建一个静态的顺序表存放整数,大小为10,完成以下操作:
1)输入6个整数,打印出顺序表的内容,并显示剩余空间;
2)在第三个位置插入元素0,打印出顺序表内容,并显示剩余空间个数;
3)再试图向表中第11个位置插入元素0
4)删除表中第六个元素,打印出表中内容,并显示剩余空间个数;
#include<stdlib.h> #include<stdio.h> #define MaxSize 10 //静态顺序表的各种操作 void insertElem(int Sqlist[],int *len,int i,int x) //向顺序表中插入元素。Sqlist表示首地址,*len表长度,i插入位置,x待插入位置 { int t; if(*len==MaxSize || i<1 || i>*len+1) //非法插入 { printf("this insert is illegal\n"); return; } for(t=*len-1;t>=i-1;t--) //插入元素 Sqlist[t+1]=Sqlist[t]; Sqlist[i-1]=x; *len=*len+1; //表长加1 } void DelElem(int Sqlist[],int *len,int i) //向顺序表删除元素,Sqlist表首地址,*len表长,i删除元素位置 { int j; if(i<1 || i>*len) { printf("this insert is illegal"); return; } for(j=i;j<=*len-1;j++) Sqlist[j-1]=Sqlist[j]; *len=*len-1; } int main() { int Sqlist[MaxSize]; int len,i; printf("input 6 integer numbers\n"); for(i=0;i<6;i++) scanf("%d",&Sqlist[i]); len=6; for(i=0;i<len;i++) printf("%d ",Sqlist[i]); printf("\nthe spare length is %d\n",MaxSize - len); insertElem(Sqlist,&len,3,0); for(i=0;i<len;i++) printf("%d ",Sqlist[i]); printf("\nthe spare length is %d\n",MaxSize - len); insertElem(Sqlist,&len,11,0); DelElem(Sqlist,&len,6); for(i=0;i<len;i++) printf("%d ",Sqlist[i]); printf("\nthe spare length is %d\n",MaxSize - len); return 0; }
动态创建一个顺序表。
#include<stdio.h> #include<conio.h> #define MaxSize 10 //动态顺序表的各种操作 typedef int ElemType; typedef struct{ int *elem; int length; int listsize; }Sqlist; void initSqlist(Sqlist *L) { L->elem=(int *)malloc(MaxSize*sizeof(ElemType)); if(!L->elem) exit(0); L->length=0; L->listsize= MaxSize; } void InsertElem(Sqlist *L,int i,ElemType item){//……} void DelElem(Sqlist *L,int i){//……}
时间: 2024-10-12 16:30:50