順序表定義:順序表是在計算機記憶體中以陣列的形式保存的線性表,線性表的順序存盤是指用一組地址連續的存盤單元依次存盤線性表中的各個元素、使得線性表中在邏輯結構上相鄰的資料元素存盤在相鄰的物理存盤單元中,即通過資料元素物理存盤的相鄰關系來反映資料元素之間邏輯上的相鄰關系,采用順序存盤結構的線性表通常稱為順序表,順序表是將表中的結點依次存放在計算機記憶體中一組地址連續的存盤單元中,
簡單來說,順序表存盤有兩個特點:
1.邏輯順序和物理順序一致,
2.資料元素之間的關系通過物理相鄰來實作,
順序表示意圖如下:

代碼實作(c語言):
1.定義線性表的順序存盤結構
#define MAXSIZE 100 //設定順序表的最大容量為100
typedef int cont; //這里將cont定義為int型別,為什么要多此一步,因為如果將int型別改為floct型別,只需要將這里的int換為float即可,省去很多修改步驟
typedef struct{
cont data[MAXSIZE];
int length;
}OList; //定義一個OList結構體,內含有一個最大容量為MAXSIZE的陣列,和順序表長度,此時OList就是定義一個順序表
2.順序表的創建
Olist *SetList()
{
OList *L;
L = (OList*)malloc(sizeof(OList)); //為L指標分配記憶體空間
L->length=0; //空表長度為0
return L;
}
3.順序表的插入
OList InsertList(OList *L,int i,cont x) //L為指向順序表的指標,i是第幾位插入,x是要插入的資料//
{
if(i<1||i>(L->length)+1)
printf("插入位置有誤");
else if(L->length==MAXSIZE)
printf("表空間已滿,不能再進行插入");
else
{
for(int j=i-1;j<L->length;j++)
L->data[j+1]=L->data[j];
L->data[i-1]=x;
}
L->length++;
return *L;
}
4.順序表的洗掉
OList DeList(OList *L,int i) //i為第幾位資料元素
{
if(i<1||i>(L->length))
printf("洗掉位置有誤");
else
{
for(int j=i-1;j<L->length;j++)
L->data[j]=L->data[j+1];
}
L->length--;
return *L;
}
5.順序表的修改
OList AmendList(OList *L,int i,cont y) //i為第幾位,y為修改后的資料元素
{
if(i<1||i>(L->length))
printf("改動位置有誤");
else
L->data[i-1]=y;
return *L;
}
6.順序表的查找
int FindList(OList *L,cont z)
//z為查找的資料元素
{
for(int i=0;i<L->length-1;i++)
{
if(L->data[i]==z)
return i+1;
}
return 0;
}
7.判斷順序表是否為空
int EmptyList(OList L)
{
if (L->length == 0)
{
return 1;
}
return 0;
}
8.列印順序表中元素
void PrintList(OList L)
{
if (EmptyList(L))
{
printf("表為空!\n");
}
for (i = 0; i < L->length; i++)
{
printf("%-3d", L->data[i]);
}
printf("\n");
}
以上就是順序表創建及實作其操作的c語言代碼,完整的代碼及試驗其功能操作如下:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
int a,b,c,d;
typedef int cont;
typedef struct{
cont data[MAXSIZE];
int length;
}OList;
//順序表的初始化//
OList *SetList()
{
OList *L;
L = (OList*)malloc(sizeof(OList));
L->length=0;
return L;
}
//順序表的插入//
OList InsertList(OList *L,int i,cont x)
{
if(i<1||i>(L->length)+1)
printf("插入位置有誤");
else if(L->length==MAXSIZE)
printf("表空間已滿,不能再進行插入");
else
{
for(int j=i-1;j<L->length;j++)
L->data[j+1]=L->data[j];
L->data[i-1]=x;
}
L->length++;
return *L;
}
//順序表的洗掉//
OList DeList(OList *L,int i)
{
if(i<1||i>(L->length))
printf("洗掉位置有誤");
else
{
for(int j=i-1;j<L->length;j++)
L->data[j]=L->data[j+1];
}
L->length--;
return *L;
}
//順序表的改動//
OList AmendList(OList *L,int i,cont y)
{
if(i<1||i>(L->length))
printf("改動位置有誤");
else
L->data[i-1]=y;
return *L;
}
//順序表的查找//
int FindList(OList *L,cont z)
{
for(int i=0;i<L->length-1;i++)
{
if(L->data[i]==z)
return i+1;
}
return 0;
}
//判斷順序表是否為空
int EmptyList(OList *L)
{
if (L->length == 0)
{
return 1;
}
return 0;
}
//列印順序表中元素
void PrintList(OList *L)
{
if (EmptyList(L))
{
printf("表為空!\n");
}
for (int i = 0; i < L->length; i++)
{
printf("%-3d", L->data[i]);
}
printf("\n");
}
int main()
{
OList *L;
L=SetList();
printf("請輸入四個資料作為順序表資料元素:\n");
scanf("%d%d%d%d",&a,&b,&c,&d);
InsertList(L,1,a);
InsertList(L,2,b);
InsertList(L,3,c);
InsertList(L,4,d);
PrintList(L); //輸出順序表現有的資料元素
AmendList(L,1,10);
PrintList(L); //列印順序表元素,查看第一個是否被修改
DeList(L,1);
PrintList(L); //列印順序表元素,查看第一個是否被洗掉
}
運行結果:

這里為了使各功能實作更加簡單易懂,最后的試驗部分十分繁瑣,各位看這部分只需要明白功能是如何實作即可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/253094.html
標籤:其他
上一篇:HTML網頁設計基礎概念
下一篇:資料結構之基本概念
