一、順序表的概念
按照線形表的邏輯順序,依次存儲到一塊連續的存儲空間中。
二、特點
1、優點是可以按照下標進行訪問,與數組相似,比較方便。
2、缺點是如果需要插入或刪除元素,則需要移動大量的元素。
三、代碼展示
1、頭文件
#include<stdio.h>
#include<assert.h>
#include<string.h>
2、順序表的聲明
#define Maxsize_ 15
typedef struct Sqlist
{
int array[Maxsize_]; //總的元素空間
int size; //有效元素個數
};
3、函數代碼
//初始化
void initlist(Sqlist* sqlist)
{
assert(sqlist);
memset(sqlist,0,sizeof(int)*Maxsize_);
sqlist->size=0;
}
//尾插
void Zinsert(Sqlist*sqlist,int data)
{
assert(sqlist);
if(sqlist->size==Maxsize_||sqlist->size>Maxsize_)
{
printf("已滿無法插入\n");
return;
}
sqlist->array[sqlist->size+1]=data;
sqlist->size++;
}
//頭插
void Ainsert(Sqlist*sqlist,int data)
{
assert(sqlist);
if(sqlist->size==Maxsize_||sqlist->size>Maxsize_)
{
printf("已滿無法插入\n");
return;
}
if(sqlist->size==0)
{
sqlist->size++;
sqlist->array[1]=data;
}
else
{
for(int i=sqlist->size;i>=1;i--)
{
sqlist->array[i+1]=sqlist->array[i];
}
sqlist->array[1]=data;
sqlist->size++;
}
}
//按位置刪除
void posdelete(Sqlist* sqlist,int pos)
{
assert(sqlist);
if(sqlist->size<1)
{
return;
}
//優化處理
if(pos<1||pos>sqlist->size)
{
pos=sqlist->size;
}
for(int i=pos;i<=sqlist->size;i++)
{
sqlist->array[i]=sqlist->array[i+1];
}
sqlist->array[sqlist->size]=0;
sqlist->size--;
}
//按值刪除(刪除順序表中所有的此值)
void valuedelete(Sqlist* sqlist,int value)
{
assert(sqlist);
if(sqlist->size<1)
{
return;
}
//方法一
//for(int i=sqlist->size;i>0;i--)
//{
// if(sqlist->array[i]==value)
// {
// for(int j=i;j<=sqlist->size;j++)
// {
// sqlist->array[j]=sqlist->array[j+1];
// }
// sqlist->size--;
// }
//}
//方法二
for(int i=1;i<=sqlist->size;i++)
{
if(sqlist->array[i]==value)
{
for(int j=i;j<=sqlist->size;j++)
{
sqlist->array[j]=sqlist->array[j+1];
}
sqlist->size--;
i--;
}
}
}
//打印
void myprint(Sqlist* sqlist)
{
if(sqlist->size==0)
{
printf("爲空不能打印");
return;
}
printf("array=");
for(int i=1;i<=sqlist->size;i++)
{
printf(" %d",sqlist->array[i]);
}
printf("\n");
}
4、主函數
int main()
{
Sqlist sqlist;
initlist(&sqlist);
//尾插
Zinsert(&sqlist,4);
Zinsert(&sqlist,4);
Zinsert(&sqlist,3);
Zinsert(&sqlist,4);
Zinsert(&sqlist,5);
Zinsert(&sqlist,4);
myprint(&sqlist);
//按位置刪除
posdelete(&sqlist,3);
myprint(&sqlist);
//按值刪除
valuedelete(&sqlist,4);
myprint(&sqlist);
//頭插
Ainsert(&sqlist,1);
Ainsert(&sqlist,2);
Ainsert(&sqlist,3);
Ainsert(&sqlist,4);
Ainsert(&sqlist,5);
Ainsert(&sqlist,6);
myprint(&sqlist);
printf("%d\n",sqlist.size);
}
四、運行結果