赞
踩
线性表12种基本操作(C语言)
VS2019制作
代码如下(示例):
#include<stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int ElemType; typedef struct { ElemType *elem; //存储空间基址 int length; //当前长度 int listsize;//当前分配的存储容量 }SqList; //构造线性表 int InitList(SqList *L) { L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));//存储分配失败 if (!L->elem) exit(OVERFLOW);//空表长度初始化为0; L->length = 0;//存储的初始容量为初始分配空间 L->listsize = LIST_INIT_SIZE; return OK; } //销毁线性表 int Desttroylist(SqList *L) { free(L->elem); L->elem = NULL; L->length = 0; L->listsize = 0; return OK; } //重置线性表 int ClearList(SqList *L) { free(L->elem); L->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType)); if (!L->elem) exit(OVERFLOW); L->length = 0; L->listsize = LIST_INIT_SIZE; return OK; } //判断线性表是否为空 int EmptyList(SqList L) { return L.length == 0 ? TRUE : FALSE; } //返回线性表的长度 int ListLength(SqList L) { return L.length; } //返回第i个数据元素的值 int GetElem(SqList L, int i) { if (i < 1 || i > L.length) return ERROR; return L.elem[i - 1]; } //判断元素 int LocateElem(SqList L, ElemType e) { for (int i = 0; i < L.length; i++) { if (L.elem[i] == e) return i + 1; } return ERROR; } //返回前驱 int PreElem(SqList L, int i) { if (i <= 1 || i > L.length) return ERROR; return L.elem[i - 2]; } //返回后继 int NextElem(SqList L, int i) { if (i < 1 || i >= L.length) return ERROR; return L.elem[i]; } //在前面插入新数据元素 int ListInsert(SqList *L, int i, ElemType e) { if (i < 1 || i > L->length + 1) return ERROR; for (int j = L->length; j >= i; j--) { L->elem[j] = L->elem[j - 1]; } L->elem[i - 1] = e; // 线性表长度加一 L->length++; return OK; } //删除第i个数据元素 int ListDetele(SqList *L, int i) { if (i < 1 || i > L->length) return ERROR; ElemType e = L->elem[i - 1]; for (int j = L->length - i; j > 0; j--) { L->elem[L->length - j - 1] = L->elem[L->length - j]; } L->length--; return e; } //调用visit() int ListTraverse(SqList L, void(*vi)(ElemType *)) { ElemType *p; int i; p = L.elem; for (i = 1; i <= L.length; i++) vi(p++); printf("\n"); return OK; } //打印 int ListPrint(SqList L) { for (int i = 1; i <= L.length; i++) { printf("%d ", GetElem(L, i)); } return OK; } int main() { SqList L; printf("*********************************\n"); printf("******* 线 性 表 ******\n"); printf("******* 1. 创建一个线性表 ******\n"); printf("******* 2. 重置该表 ******\n"); printf("******* 3. 判断是否为空表 ******\n"); printf("******* 4. 返回元素个数 ******\n"); printf("******* 5. 返回指定数值 ******\n"); printf("******* 6. 判断元素 ******\n"); printf("******* 7. 返回前驱 ******\n"); printf("******* 8. 返回后继 ******\n"); printf("******* 9. 插入元素 ******\n"); printf("******* 10. 删除元素 ******\n"); printf("******* 11. 调用函数 ******\n"); printf("******* 12. 销毁线性表 ******\n"); printf("******* 13. 打印当前线性表 ******\n"); printf("*********************************\n\n"); printf("---------------------------------\n\n"); InitList(&L); while(1){ int num1, placenum; int datanum,numvalue; printf("请输入对应指令:\n"); scanf_s("%d", &num1); switch(num1) { case 1://创建线性表 printf("请输入元素个数:\n"); scanf_s("%d", &datanum); printf("请输入线性表元素:\n"); for (int i = 1,a; i < datanum+1; i++) { scanf_s("%d", &a); ListInsert(&L,i,a); } printf("您输入的线性表:\n"); ListPrint(L); printf("\n"); break; case 2://重置 ClearList(&L); break; case 3://判断 printf("%d\n",EmptyList(L)); break; case 4://返回元素个数 printf("元素个数:%d\n",ListLength(L)); break; case 5://返回指定数值 printf("请输入位置:\n"); scanf_s("%d", &placenum); printf("第%d个元素:%d\n",placenum,ListDetele(&L, placenum)); break; case 6://判断元素 printf("请输入一个值:\n"); scanf_s("%d", &numvalue); printf("第一个与%d值相等的位置:%d\n",numvalue,LocateElem(L, numvalue)); break; case 7://返回前驱 printf("请输入位置:\n"); scanf_s("%d", &placenum); printf("第%d个元素的前驱:%d\n",placenum,PreElem(L, placenum)); break; case 8://返回后继 printf("请输入位置:\n"); scanf_s("%d", &placenum); printf("第%d个元素的后继:%d\n",placenum,NextElem(L, placenum)); break; case 9://插入元素 printf("请输入位置:\n"); scanf_s("%d", &placenum); printf("请输入插入的值:\n"); scanf_s("%d", &numvalue); ListInsert(&L, placenum, numvalue); printf("当前线性表为:"); ListPrint(L); printf("\n"); break; case 10://删除元素 printf("请输入位置:\n"); scanf_s("%d", &placenum); printf("删除的元素:%d\n",ListDetele(&L, placenum)); break; case 11: break; case 12://销毁 Desttroylist(&L); break; case 13://打印 ListPrint(L); printf("\n"); break; default: break; } } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。