🎋在主函数中实现
//插入—— 在第i个位置添加元素x void SeqList_Insert(SeqList* p, int i, DataType x) { int j; if (i <= 0 || i >= p->size) { printf("插入位置不在范围内!\n"); exit(-1); } if (p->size == MAX) { printf("线性表已满!\n"); exit(-1); } for (j = p->size; j > i; j--) p->a[j] = p->a[j-1]; p->a[i] = x; p->size++; }
🎊🎊删除
🎋删除顺序表中postion位置的结点
void SeqList_Dele(SeqList* p,int pos) { if (p->size == 0) { printf("顺序表是空的!\n"); exit(-1); } if (pos < 0 || pos >= p->size) { printf("指定删除的位置不存在!\n"); exit(-1); } int i; for (i = pos; i < p->size - 1; i++) p->a[i] = p->a[i + 1]; p->size--; }
🎋在主函数中实现
//删除顺序表中position位置的结点 printf("请输入要删除结点的位置:\n"); int pos = 0; scanf("%d", &pos); SeqList_Dele(&s, pos); SQList_Print(&s);//打印线性表
🎊🎊倒置顺序表
//顺序表倒置 void SeqList_Inverse(SeqList* p) { int i,j,tmp; for (i = 0,j=p->size-1; i < p->size / 2; i++,j--) { tmp = p->a[i]; p->a[i] = p->a[j]; p->a[j] = tmp; } }
🎋主函数中实现
//顺序表倒置 SeqList_Inverse(&s); SQList_Print(&s);//打印元素
🎊🎊求顺序表中值为x的结点的个数
//求顺序表中值为x的结点的个数 int SeqList_Find_X(SeqList* p,DataType x) { int i = 0,count=0; for (i = 0; i < p->size; i++) { if (p->a[i] == x) count++; } return count; }
🎋主函数中实现
//求顺序表中值为x的结点的个数 int X,count; printf("请输入要查找的值:\n"); scanf("%d", &X); count = SeqList_Find_X(&s, X); printf("顺序表中值为x的结点的个数为%d", count);
🎇🎇🎇完整代码
SeqList.c:编写实现各种功能的函数。
SeqList.h:头文件,包含需要的头文件和结构体的声明异界函数的声明。
test.c:用来测试,主要在主函数中调用函数。
🎇SeqList.h
#pragma once #define _CRT_SECURE_NO_WARNINGS 1 #define MAX 100 #include <stdio.h> #include<stdlib.h> //创建静态线性表 typedef int DataType; typedef struct SeqList { DataType a[MAX]; int size; }SeqList; //函数声明 void SQList_Init(SeqList* p); void SQList_Create(SeqList* p); void SQList_Print(SeqList* p); void SQList_PushFront(SeqList* p, DataType x); void Push_Back_SQList(SeqList* p, DataType x); void SQList_Pop_Front(SeqList* p); void SQList_Pop_Back(SeqList* p); DataType SeqList_Get(SeqList* p, int i); void SeqList_Find(SeqList* p, DataType x); void SeqList_Insert(SeqList* p, int i, DataType x); void SeqList_Inverse(SeqList* p); void SeqList_Dele(SeqList* p, int pos); int SeqList_Find_X(SeqList* p, DataType x);
🎇SeqList.c
#include "SeqList.h" //初始化——置空顺序表 void SQList_Init(SeqList* p) { p->size = 0; } //创建一个顺序表 void SQList_Create(SeqList* p) { int n,i; printf("请输入元素的个数>\n"); scanf("%d", &n); printf("请依次输入元素>\n"); for (i = 0; i < n; i++) { scanf("%d", &p->a[i]); p->size++; } printf("\n"); } //打印顺序表各结点的值 void SQList_Print(SeqList* p) { int i = 0; for (i = 0; i < p->size; i++) { printf("%-3d", p->a[i]); } printf("\n"); } //头插 void SQList_PushFront(SeqList* p,DataType x) { int i; if (p ->size == MAX) { printf("顺序表是满的!\n"); exit(-1); } for (i = p->size; i >= 0; i--) { p->a[i] = p->a[i - 1]; } p -> a[0] = x; p->size++; } //尾插 void Push_Back_SQList(SeqList* p,DataType x) { if (p->size == MAX) { printf("顺序表是满的!\n"); exit(-1); } p->a[p->size] = x; p->size++; } //头删 void SQList_Pop_Front(SeqList* p) { int i; if (p->size == 0) { printf("顺序表是空的!\n"); exit(-1); } for (i = 1; i >= 0; i--) { p->a[i - 1] = p->a[i]; } p->size--; printf("\n"); } //尾删 void SQList_Pop_Back(SeqList* p) { p->size--; } //查找 //查找第i个节点的值(0,1...p->size-1) DataType SeqList_Get(SeqList* p,int i) { if (i < 0 || i >= p->size) { printf("指定位置的结点不存在~\n"); exit(-1); } return p ->a[i]; } //查找值为x的结点 void SeqList_Find(SeqList* p,DataType x) { int i = 0; for (i = 0; i < p->size; i++) { if (p->a[i] == x) { printf("找到了!\n"); printf("下标为%d", i); } } } //插入—— 在第i个位置添加元素x void SeqList_Insert(SeqList* p, int i, DataType x) { int j; if (i <= 0 || i >= p->size) { printf("插入位置不在范围内!\n"); exit(-1); } if (p->size == MAX) { printf("线性表已满!\n"); exit(-1); } for (j = p->size; j > i; j--) p->a[j] = p->a[j-1]; p->a[i] = x; p->size++; } void SeqList_Dele(SeqList* p,int pos) { if (p->size == 0) { printf("顺序表是空的!\n"); exit(-1); } if (pos < 0 || pos >= p->size) { printf("指定删除的位置不存在!\n"); exit(-1); } int i; for (i = pos; i < p->size - 1; i++) p->a[i] = p->a[i + 1]; p->size--; } //顺序表倒置 void SeqList_Inverse(SeqList* p) { int i,j,tmp; for (i = 0,j=p->size-1; i < p->size / 2; i++,j--) { tmp = p->a[i]; p->a[i] = p->a[j]; p->a[j] = tmp; } } //求顺序表中值为x的结点的个数 int SeqList_Find_X(SeqList* p,DataType x) { int i = 0,count=0; for (i = 0; i < p->size; i++) { if (p->a[i] == x) count++; } return count; }
🎇test.c
#include "SeqList.h" int main() { SeqList s;//创建线性表变量 SQList_Init(&s);//初始化 SQList_Create(&s);//创建一个线性表 SQList_Print(&s);//打印元素 //头插 printf("------头插------\n"); printf("请输入要头插的元素>\n"); int x; scanf("%d", &x); SQList_PushFront(&s, x); SQList_Print(&s);//打印头插之后的线性表 //尾插 printf("------尾插------\n"); int y; printf("请输入要尾插的元素>\n"); scanf("%d", &y); Push_Back_SQList(&s,y); SQList_Print(&s);//打印尾插之后的线性表 //头删 printf("------头删------\n"); SQList_Pop_Front(&s); SQList_Print(&s);//打印头删之后的线性表 //尾删 printf("------尾删------\n"); SQList_Pop_Back(&s); SQList_Print(&s);//打印尾之后删的线性表 //查找第i个节点的值 printf("------查找第i个节点的值------\n"); printf("请输入查找的结点\n"); int i; scanf("%d", &i); printf("\n第%d个结点的值为%d\n", i,SeqList_Get(&s, i)); //查找值为a的结点 printf("------查找值为a的结点------\n"); int a; printf("请输入要查找的值>\n"); scanf("%d", &a); SeqList_Find(&s, a); //插入—— 在第j个位置添加元素x int j; int b; printf("\n请输入要插入的位置>\n"); scanf("%d", &j); printf("请输入要插入的元素>\n"); scanf("%d", &b); SeqList_Insert(&s, j, b); SQList_Print(&s);//打印元素 //删除顺序表中position位置的结点 printf("请输入要删除结点的位置:\n"); int pos = 0; scanf("%d", &pos); SeqList_Dele(&s, pos); SQList_Print(&s);//打印线性表 //顺序表倒置 SeqList_Inverse(&s); SQList_Print(&s);//打印元素 //求顺序表中值为x的结点的个数 int X,count; printf("请输入要查找的值:\n"); scanf("%d", &X); count = SeqList_Find_X(&s, X); printf("顺序表中值为x的结点的个数为%d", count); return 0; }