顺序表的操作
- 顺序表的建立
#define Listsize 100
typedef int datatype;
typedef struct {
datatype data[Listsize];
datatype Length;
}SeqList,*Pseqlist;
- 顺序表的初始化
void InitList(Pseqlist L) {
if (L == NULL)
return;
L->Length = 0;
}
- 顺序表的长度判断
int Length(Pseqlist L) {
if (L == NULL)
return;
return L->Length;
}
- 顺序表的第一位查询
int GetData(Pseqlist L,int i) {
if (L->Length<1 || (L->Length)>Length(L))
{
printf("查询出错");
return 0;
}
else
return L->data[i];
}
- 顺序表的插入
int InsertList(Pseqlist L,int i,int x) {
int j;
if (i<1 || L->Length>(Length(L) + 1)) {
printf("非法插入");
return 0;
}
else if (i >= Listsize) {
printf("顺序表已满,无法插入");
return 0;
}
else {
for (j = i; j <= L->Length; j--) {
L->data[j + 1] = L->data[j];
}
L->data[i-1] = x;
L->Length++;
return 1;
}
return 0;
}
- 顺序表的值的删除
int DelList(Pseqlist L, int i) {
if (L->Length < 1) {
printf("表为空,无法删除");
return 0;
}
if (i<1 || i>L->Length) {
printf("非法删除位置");
return 0;
}
else {
for (int j = i + 1; j <= L->Length; j++) {
L->data[j-2] = L->data[j-1];
}
L->Length--;
return 1;
}
}
- 顺序表的查询
int search_data(Pseqlist L, int x) {
for(int j=0;j<L->Length;j++)
if (L->data[j] == x) {
printf("已查找到%d,位置为%d\n", L->data[j], j+1);
}
return 0;
}
- 顺序表的头插
//头插
void pushHead(Pseqlist L, int x) {
if (L->Length >= Listsize) {
printf("顺序表已满无法插入");
return;
}
for (int i = L->Length; i >=0; i--) {
L->data[i] = L->data[i - 1];
}
L->data[0] = x;
L->Length++;
}
- 顺序表的头删
void popHead(Pseqlist L) {
if (EmptList(&L)) {
printf("表为空,无法删除");
return;
}
for (int i = 0; i < L->Length; i++) {
L->data[i] = L->data[i + 1];
}
L->Length--;
}
- 顺序表的尾插
void pushtail(Pseqlist L,int x) {
if (L->Length >= Listsize) {
printf("表已满,无法插入");
return;
}
L->data[L->Length] = x;
L->Length++;
}
- 顺序表的尾删
void poptail(Pseqlist L) {
if (EmptList(&L)) {
printf("表为空,无法删除");
return;
}
L->Length--;
}
- 顺序表的清除
void clear(Pseqlist L) {
L->Length = 0;
}
- 顺序表的判空
int EmptList(Pseqlist L) {
if (L->Length == 0)
{
return 1;
}
return 0;
}
- 顺序表的输出
void printList(Pseqlist L) {
if (EmptList(&L)) {
printf("表为空");
return;
}
else {
for (int i = 0; i < L->Length; i++) {
printf("%3d", L->data[i]);
}
}
printf("\n");
}
#以下为完整代码
#include<stdio.h>
#define Listsize 100
typedef int datatype;
typedef struct {
datatype data[Listsize];
datatype Length;
}SeqList,*Pseqlist;
void InitList(Pseqlist L) {
if (L == NULL)
return;
L->Length = 0;
}
int Length(Pseqlist L) {
if (L == NULL)
return;
return L->Length;
}
int GetData(Pseqlist L,int i) {
if (L->Length<1 || (L->Length)>Length(L))
{
printf("查询出错");
return 0;
}
else
return L->data[i];
}
int InsertList(Pseqlist L,int i,int x) {
int j;
if (i<1 || L->Length>(Length(L) + 1)) {
printf("非法插入");
return 0;
}
else if (i >= Listsize) {
printf("顺序表已满,无法插入");
return 0;
}
else {
for (j = i; j <= L->Length; j--) {
L->data[j + 1] = L->data[j];
}
L->data[i-1] = x;
L->Length++;
return 1;
}
return 0;
}
int DelList(Pseqlist L, int i) {
if (L->Length < 1) {
printf("表为空,无法删除");
return 0;
}
if (i<1 || i>L->Length) {
printf("非法删除位置");
return 0;
}
else {
for (int j = i + 1; j <= L->Length; j++) {
L->data[j-2] = L->data[j-1];
}
L->Length--;
return 1;
}
}
int search_data(Pseqlist L, int x) {
for(int j=0;j<L->Length;j++)
if (L->data[j] == x) {
printf("已查找到%d,位置为%d\n", L->data[j], j+1);
}
return 0;
}
//头插
void pushHead(Pseqlist L, int x) {
if (L->Length >= Listsize) {
printf("顺序表已满无法插入");
return;
}
for (int i = L->Length; i >=0; i--) {
L->data[i] = L->data[i - 1];
}
L->data[0] = x;
L->Length++;
}
void popHead(Pseqlist L) {
if (EmptList(&L)) {
printf("表为空,无法删除");
return;
}
for (int i = 0; i < L->Length; i++) {
L->data[i] = L->data[i + 1];
}
L->Length--;
}
void pushtail(Pseqlist L,int x) {
if (L->Length >= Listsize) {
printf("表已满,无法插入");
return;
}
L->data[L->Length] = x;
L->Length++;
}
void poptail(Pseqlist L) {
if (EmptList(&L)) {
printf("表为空,无法删除");
return;
}
L->Length--;
}
void clear(Pseqlist L) {
L->Length = 0;
}
int EmptList(Pseqlist L) {
if (L->Length == 0)
{
return 1;
}
return 0;
}
void printList(Pseqlist L) {
if (EmptList(&L)) {
printf("表为空");
return;
}
else {
for (int i = 0; i < L->Length; i++) {
printf("%3d", L->data[i]);
}
}
printf("\n");
}
int main() {
SeqList L;
InitList(&L);
printList(&L);
InsertList(&L, 1, 1);
InsertList(&L, 2, 2);
InsertList(&L, 3, 3);
printList(&L);
DelList(&L, 2);
printList(&L);
search_data(&L, 3);
printList(&L);
pushHead(&L, 5);
printList(&L);
popHead(&L);
printList(&L);
pushtail(&L, 8);
printList(&L);
poptail(&L);
printList(&L);
clear(&L);
printList(&L);
}