c语言顺序表实现
顺序表是程序员在编程中会经常用到的数据结构,简单来说,顺表就是用数组来存储
数据和数据与数据之间的联系。
#pragma once
#include<stdio.h>
#include<malloc.h>
typedef int ElemType; //假定线性表的元素类型为整型
#define LIST_SIZE 1024 //假定线性表长度是1024
#define TRUE 1
#define FALSE 0
typedef struct {
ElemType data[LIST_SIZE];
int last; //指向最后一个节点的位置
}SequenList;
SequenList *lptr;sequenceList.h
#include "sequece.h"
#include <iostream>
using namespace std;
//初始化
SequenList *InitSeq(void) {
SequenList *pList;
pList =(SequenList*) malloc(sizeof(SequenList));
if (pList!=NULL) {
pList->last = 0;//初始化成功,且长度为0
}
return pList;
}
//求长度:求线性表中的元素个数
int GetSizeSeq(SequenList* pList) {
return pList->last;
}
//取元素:取给定位置的元素值
//pList:目标元素顺序表,获取元素的下标:pos, e:将元素值放入
int GetElemSqList(SequenList*pList, int pos, ElemType *e) {
if (pos<0 || pos>pList->last) {
return FALSE;
}
if (pList->last <= 0) {
return FALSE;
}
//说明此时pos在0--n之间
*e = pList->data[pos];
return TRUE;
}
//查元素:查找给定元素的位置
//相同值取第一个
//返回值:-1表示没有找到,否则返回带查找元素的角标
//pList:传入的数组顺序表,key比对值
int LocateElemSeqList(SequenList*pList, ElemType key) {
for (int i = 0; i < pList->last; ++i) {
if (pList->data[i] == key) {
return i;
}
}
return -1;
}
//插入元素:在指定位置插入元素
//插入的位置为K:k:0--n-1
//顺序表:不满
//pList:目标顺序表,x待插入的元素,k插入的位置
int InsertElemSqList(SequenList*pList, ElemType x, int k) {
//顺序表尚未填满
if (pList->last >= LIST_SIZE - 1)
{
return FALSE;
}
//表明K是有效位置
if (k<0 || k>(pList->last+1)) {
return FALSE;
}
for (int j = pList->last; j >= k; j--) {
pList->data[j + 1] = pList->data[j];
}
pList->data[k] = x;
pList->last++;
return TRUE;
}
//删除:删除指定位置的元素或者删除给定的值
//pList:目标数组,k表示需要删除的位置
int DelElemSeqList(SequenList*pList, int k) {
if ((k >= 0 && k <= pList->last-1) && (pList->last != 0)) {
for (int j = k; j <= pList->last-1; j++) {
pList->data[j] = pList->data[j + 1];
}
pList->last--;
return TRUE;
}
return FALSE;
}
//遍历元素:从头到尾
void showSeqList(SequenList*pList) {
for (int i = 0; i < pList->last; ++i) {
printf("%d ", pList->data[i]);
}
}
int main()
{
lptr = InitSeq();
if (lptr) {
//todo:继续使用这个顺序表
for (int i = 0; i < 10; ++i) {
InsertElemSqList(lptr,i,i);
}
cout << endl;
cout << "length=" << GetSizeSeq(lptr) << endl;
printf("************\n");
showSeqList(lptr);
DelElemSeqList(lptr, 9);
printf("************\n");
showSeqList(lptr);
cout << endl;
cout << "length=" << GetSizeSeq(lptr) << endl;
int pos = LocateElemSeqList(lptr, 6);
cout << "元素6位置" << pos << endl;
}
else {
//to do
}
}main.c