#include<stdio.h> #include<iostream> #include<algorithm> #define _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_DEPRECATE #pragma warning(disable:4996) using namespace std; #define MAXSIZE 1000 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int last; }seqlist; void PrintMenu() { printf("欢迎进入顺序表操作系统!\n"); printf("--------------------------------------------\n"); printf("0.输出顺序表\n"); printf("1.创建顺序表\n"); printf("2.查找一个元素item在顺序表的位置\n"); printf("3.在顺序表第i个位置插入一个元素item\n"); printf("4.删除顺序表第i个位置的元素\n"); printf("5.修改顺序表第i个位置的元素\n"); printf("*******************************************\n"); printf("6.对顺序表L排序\n"); printf("7.在有序的顺序表中插入一个元素item\n"); printf("8.合并有序表\n"); printf("*******************************************\n"); printf("9.求集合A和B的对称差集\n"); printf("*******************************************\n"); printf("10.输出系统菜单\n"); printf("11.退出系统\n"); printf("--------------------------------------------\n"); } void print(seqlist L)//输出顺序表 { for (int i = 0; i < L.last; i++) { printf("%d ", L.data[i]); } printf("\n"); } void create(seqlist* L)//创建顺序表 { printf("请输入顺序表的元素(ctrl+z结束输入):\n"); int n = 0, x; while (~scanf("%d", &x)) {//while(scanf("%d",&x) == 1) L->data[n] = x; n++; } L->last = n; } int find(seqlist L,ElemType item)//查找一个元素item在顺序表的位置,找不到返回-1 { for (int i = 0; i < L.last; i++) { if (item == L.data[i]) { return i + 1; } } return -1; } int insert(seqlist* L, int n, ElemType item)//在顺序表的第i个位置插入一个元素item,插入成功返回1;失败返回-1 { if (L->last == MAXSIZE || n < 1 || n > L->last - 1) { return -1; } for (int i = L->last-1; i >=n-1 ; i--) { L->data[i + 1] = L->data[i]; } L->last++; L->data[n - 1] = item; return 1; } int del(seqlist*L,int n)//删除顺序表第n个位置的元素,失败为-1 { if (n > L->last || n < 0) { return - 1; } for (int j = n-1; j < L->last-1; j++) { L->data[j] = L->data[j + 1]; } L->last--; return 1; } int modify(seqlist* L, int n, ElemType item)//改变顺序表第n个位置的元素,失败为-1 { if (n > L->last || n < 0) { return -1; } L->data[n-1] = item; return 1; } void listsort(seqlist* L)//对顺序表L排序 { int y; for(int i=1;i<L->last;i++) { for(int j=0;j<(L->last)-i;j++) { if(L->data[j]>L->data[j+1]) { y=L->data[j]; L->data[j]=L->data[j+1]; L->data[j+1]=y; } } } } void insertsorted(seqlist* L, ElemType item) //有序的顺序表中插入一个元素item { for (int i = L->last - 1; i >= 0; i--) { if (item < L->data[i]) { L->data[i + 1] = L->data[i]; } else { L->data[i + 1] = item; break; } } if (item < L->data[0]) { L->data[0] = item; } L->last++; } void mergeSorted(seqlist* L, seqlist *R , seqlist *M)//合并2个有序表L和R到新表M { int n = L->last + R->last; M->last = n; for (int i = 0, j = 0, k = 0; k < n; k++) { if (i == L->last || j == R->last) { for (; j < R->last; j++) { M->data[i + j] = R->data[j]; } for (; i < L->last; i++) { M->data[i + j] = L->data[i]; } break; } if (L->data[i] <= R->data[j]) { M->data[k] = L->data[i]; i++; continue; } if (L->data[i] > R->data[j]) { M->data[k] = R->data[j]; j++; continue; } } } void gather(seqlist *s1,seqlist *s2) { for(int i=0;i<s1->last;i++) { for(int j=0;j<s2->last;j++) { if(s1->data[i]==s2->data[j]) { for(int k=i;k<s1->last-1;k++) { s1->data[k]=s1->data[k+1]; } i--; s1->last--; for(int k=j;k<s2->last-1;k++) { s2->data[k]=s2->data[k+1]; } j--; s2->last--; } } } for(int i=0;i<s2->last;i++) { int k=s1->last; s1->data[k]=s2->data[i]; s1->last++; } } int main() { PrintMenu(); int choice, p, x; //用户选择,位置,插入元素 ElemType item; seqlist L; //初始化顺序表为空表 L.last = 0; //空表长度为0 //进入菜单循环 while (~scanf("%d", &choice)) { switch (choice) { case 0: printf("0.输出顺序表\n"); print(L); break; //**************************************/ case 1: printf("1.创建顺序表\n"); create(&L); printf("创建成功,输出顺序表\n"); print(L); break; //**************************************/ case 2: printf("2.查找一个元素item在顺序表的位置\n"); scanf("%d", &item); if (find(L, item) == -1) { printf("查找失败\n"); } else printf("元素在数据表中的位置是:%d\n", find(L, item)); break; //**************************************/ case 3: printf("3.在顺序表第i个位置插入一个元素item\n"); printf("请输入插入的位置和元素:"); scanf("%d %d", &p,&x); if (insert(&L, p, x) == -1) { printf("插入失败!\n"); } else { print(L); } break; //**************************************/ case 4: printf("4.删除顺序表第i个位置的元素\n"); printf("请输入要删除的位置:"); cin >> item; if (del(&L, item) == -1) { printf("删除失败!\n"); } else print(L); break; //**************************************/ case 5: printf("5.修改顺序表第i个位置的元素\n"); printf("请输入修改的位置和修改后的值:\n"); scanf("%d %d",&p,&item); if (modify(&L, p, item) == -1) printf("修改失败!\n"); else { printf("修改成功,输出顺序表\n"); print(L); } break; //**************************************/ case 6: printf("6.对顺序表sq排序\n"); listsort(&L); printf("排序成功,输出顺序表\n"); print(L); break; case 7: printf("7.在有序的顺序表中插入一个元素item\n"); printf("请输入插入的元素:\n"); cin >> item; insertsorted(&L, item); print(L); //**************************************/ break; case 8: printf("8.合并有序表\n"); seqlist s1, s2, s3; printf("请输入2个有序表(务必从小到大排序):\n"); create(&s1); create(&s2); mergeSorted(&s1, &s2, &s3); print(s3); //**************************************/ break; case 9: printf("请输入两个集合:\n"); seqlist s11,s22; create(&s11); create(&s22); gather(&s11,&s22); print(s11); break; case 10:PrintMenu(); return 0; case 11:printf("系统即将退出,欢迎再次使用!\n"); break; default: printf("你的选择有误,请重新输入!\n"); } } return 0; }
标签:顺序,last,int,item,printf,data From: https://www.cnblogs.com/BlueTeas/p/16743544.html