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