main.c:
#include <stdio.h> #include <stdlib.h> #include "SequenceList.h" int main() { //创建顺序表和指针 SequenceList SL, * P_SL; int choice = 0; P_SL = &SL; SL.length = 0; //初始化顺序表长度 menu(); while (true) { printf("\n请输入您的选择:"); fflush(stdin); scanf_s("%d", &choice); switch (choice) { case 0: exitSystem(); break; case 1: inputPL(P_SL); break; case 2: ouputPL(P_SL); break; case 3: insertSLHead(P_SL); break; case 4: insertSLTail(P_SL); break; case 5: insertSLIndex(P_SL); break; case 6: deleteSLHead(P_SL); break; case 7: deleteSLTail(P_SL); break; case 8: deleteSLIndex(P_SL); break; case 9: bubbleSortSLData(P_SL); break; case 10: findSLData(P_SL); break; default: system("cls"); break; } } system("pause"); return 0; }
SequenceList.h:
#ifndef _SEQUENCE_H_ #define _SEQUENCE_H_ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MAXSIZE 20 //定义顺序表 typedef struct { int data[MAXSIZE]; //顺序表中用来保存数据的数组 int length; //顺序表的长度 }SequenceList; //退出系统 void exitSystem(); //用来设计虚拟界面的边框 void printStar(); //界面 void menu(); //顺序表的初始化 以及输入 void inputPL(SequenceList* P_SL); //输出顺序表 void ouputPL(SequenceList* P_SL); //从头部插入数据 void insertSLHead(SequenceList* P_SL); //从尾部插入数据 void insertSLTail(SequenceList* P_SL); //指定位置插入数据 void insertSLIndex(SequenceList* P_SL); //删除头部结点 void deleteSLHead(SequenceList* P_SL); //删除尾部结点 void deleteSLTail(SequenceList* P_SL); //指定位置删除结点 void deleteSLIndex(SequenceList* P_SL); //查找顺序表中的元素 void findSLData(SequenceList* P_SL); //冒泡排序 void bubbleSortSLData(SequenceList* P_SL); #endif
SequenceList.c:
#include "SequenceList.h" //用来设计虚拟界面的边框 void printStar() { for (int i = 0; i < 70; i++) { printf("*"); } printf("\n"); } //界面 void menu() { printStar(); printf("\t\t\t欢迎进入顺序表操作界面!\n"); printf("请从键盘输入数字,完成对应的操作(1到8为有效操作,输入其他退出程序)\n"); printf("\t 0.退出系统\n"); printf("\t 1.从键盘连续输入n个整数,建立一个顺序表\n"); printf("\t 2.输出该顺序表\n"); printf("\t 3.从键盘输入一个整数,插入到顺序表的头部\n"); printf("\t 4.从键盘输入一个整数,插入到顺序表的尾部\n"); printf("\t 5.从键盘输入一个整数,插入到顺序表的指定位置\n"); printf("\t 6.从顺序表的头部删除一个结点\n"); printf("\t 7.从顺序表的尾部删除一个结点\n"); printf("\t 8.从顺序表的指定位置删除一个结点\n"); printf("\t 9.对顺序表进行排序(冒泡排序)\n"); printf("\t 10.从顺序表中查找元素(二分查找)查找之前要先排序\n"); printStar(); } //退出系统 void exitSystem() { printf("欢迎下次使用!\n"); system("pause"); exit(0); } //初始化顺序表 void inputPL(SequenceList* P_SL) { int length; printf("请输入顺序表的长度:"); scanf_s("%d", &length); printf("请输入 %d 个数据:", length); for (int i = 0; i < length; i++) { scanf_s("%d", &P_SL->data[i]); } P_SL->length = length; //更新一下顺序表的长度 } //输出顺序表 void ouputPL(SequenceList* P_SL) { if (P_SL->length == 0) { printf("该顺序表为空,请先选择输入!\n"); } else { printf("输出的顺序表:\n"); for (int i = 0; i < P_SL->length; i++) { printf("array[%d] = %d \n", i, P_SL->data[i]); } printf("\n"); } } //从头部插入数据 void insertSLHead(SequenceList* P_SL) { int data = 0; printf("请输入一个整数,从头部插入数据:\n"); scanf_s("%d", &data); if (P_SL->length == 0) { //顺序表为空 P_SL->length++; P_SL->data[0] = data; } else { P_SL->length++; for (int i = P_SL->length - 1; i > 0; i--) { P_SL->data[i] = P_SL->data[i - 1]; } P_SL->data[0] = data; } printf("从头部插入数据已成功!\n"); } //从尾部插入数据 void insertSLTail(SequenceList* P_SL) { int data = 0; printf("请输入一个整数,从尾部插入到顺序表中:\n"); scanf_s("%d", &data); P_SL->length++; P_SL->data[P_SL->length-1] = data; printf("从尾部插入数据成功!\n"); } //指定位置插入数据 void insertSLIndex(SequenceList* P_SL) { int data = 0, index = 0; printf("请输入插入顺序表中的位置(下标值):\n"); scanf_s("%d", &index); if (index == 0) { insertSLHead(P_SL); } else if (index == P_SL->length) { insertSLTail(P_SL); } else if (index < 0 || index > P_SL->length) { printf("您输入插入的位置不对,重新输入!\n"); insertSLIndex(P_SL); } else { P_SL->length++; printf("请输入您要插入的结点值:\n"); scanf_s("%d", &data); for (int i = P_SL->length - 2; i > 0; i--) { if (i == index) { for (int j = P_SL->length; j >= i; j--) { P_SL->data[j] = P_SL->data[j - 1]; } P_SL->data[index] = data; break; } } } } //删除头部结点 void deleteSLHead(SequenceList* P_SL) { if (P_SL->length == 0) { printf("该顺序表为空,无法删除!\n"); } else { for (int i = 1; i < P_SL->length; i++) { P_SL->data[i - 1] = P_SL->data[i]; } printf("头部删除结点成功!\n"); P_SL->data[P_SL->length] = 0; P_SL->length--; } } //删除尾部结点 void deleteSLTail(SequenceList* P_SL) { if (P_SL->length == 0) { printf("该顺序表为空,无法删除!\n"); } else { P_SL->data[P_SL->length - 1] = 0; P_SL->length--; printf("尾部删除结点成功!\n"); } } //指定位置删除结点 void deleteSLIndex(SequenceList* P_SL) { if (P_SL->length == 0) { printf("该顺序表为空,无法删除!\n"); } else { int data = 0, index = 0; printf("请输入删除结点的位置:"); scanf_s("%d", &index); if (index == 0) { deleteSLHead(P_SL); } else if (index == P_SL->length - 1) { deleteSLTail(P_SL); } else if (index < 0 || index >= P_SL->length) { printf("您输入删除的位置不对,重新输入!\n"); deleteSLIndex(P_SL); } else { for (int i = 1; i < P_SL->length - 1; i++) { if (index == i) { for (int j = i; j < P_SL->length - 1; j++) { P_SL->data[j] = P_SL->data[j + 1]; } P_SL->data[P_SL->length - 1] = 0; P_SL->length--; printf("指定位置删除成功!\n"); break; } } } } } //冒泡排序 void bubbleSortSLData(SequenceList* P_SL) { for (int i = 0; i < P_SL->length; i++) //确定排序趟数 { for (int j = i + 1; j < P_SL->length; j++) //确定比较次数 { if (P_SL->data[i] > P_SL->data[j]) { int temp = P_SL->data[i]; P_SL->data[i] = P_SL->data[j]; P_SL->data[j] = temp; } } } printf("排序成功!\n"); } //查找顺序表中的元素 void findSLData(SequenceList* P_SL) { if (P_SL->length == 0) { printf("该顺序表为空,无法查找!\n"); } else { /*二分查找法*/ int data = 0; int top = 0, end = P_SL->length - 1, mid; //定义头部,中部,尾部三个下标 int find = -1; //定义需要找的数的下标 -1说明没找到 //printf("end = %d\n", end); printf("请输入查找的数据:"); scanf_s("%d", &data); while (top <= end) { mid = (top + end) / 2; if (P_SL->data[mid] == data) { find = mid; break; //如果找到直接退出循环 } else if (P_SL->data[mid] > data) { //如果当前的值比查找的值大,就将尾部的下标移至mid的前一处 end = mid - 1; } else { //如果当前的值比需要找的值小,就将头部的下标移到mid的后一处 top = mid + 1; } } if (find == -1) { printf("查找失败,此顺序表中没有该数据!\n"); } else { printf("查找成功,%d在数组array里面 \n", data); } } }标签:void,SL,冒泡排序,C语言,length,表中用,printf,data,SequenceList From: https://www.cnblogs.com/smartlearn/p/16976432.html