数据结构-学生顺序表的处理

在一个数据文件中存放若干学生数据记录,每条记录都有如下数据项:学号,姓名,性别,成绩。
编一个程序,采用顺序存储结构存储这批数据,并对该数据进行排序。要求:数组前部为男同学,后部为女同学,并且男女同学都按成绩递减排序,分别计算男生合格率、女生合格率、全班的成绩平均分,并把排序后的学生数据记录及计算结果存入另一个数据文件中。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
7-2 jmu-ds-顺序表的基本操作(15 分)

实现顺序表的基本运算:初始化、插入、删除、求表的长度、判空、释放。 (1)从键盘输入数据到数组; (2)用数组的数据创建顺序表; (3)输出顺序表L; (4)输出顺序表L的长度; (5)判断顺序表L是否为空; (6)输出顺序表L的第3个元素; (7)输出元素a的位置; (8)在第4个元素位置上插入‘f’元素; (9)输出顺序表L; (10)删除L的第3个元素; (11)输出顺序表L; (12)释放顺序表L。 package sss; import java.util.*; import java.util.Scanner; import java.util.ArrayList; public class Qllll { public static void main(String[] args) { Scanner in = new Scanner(System.in); int a=in.nextInt(); String string=""; while(in.hasNextLine()){ String s=in.nextLine(); if(s.equals("\n")){ in.close(); break; }else{ string=string+s; } } ArrayList list =new ArrayList(); char[] ar = string.toCharArray(); char []sc=new char[a]; int n=0; for(int i=0;i<a;i++) { sc[i]=ar[n]; n=n+2; } System.out.println(ar); for(int i=0;i<a;i++) { list.add(sc[i]); } for(Object obj : list) { System.out.print(obj); } System.out.println(); System.out.println(list.size()); if(list.isEmpty()); else{ System.out.println("no"); } System.out.println(list.get(2)); System.out.println(list.indexOf('a')+1); list.add(3,'f'); for(Object obj : list) { System.out.print(obj); } System.out.println(); list.remove(2); for(Object obj : list) { System.out.print(obj); } } }输入字符窜的时候输入换行不能结束输入为什么

数据结构,顺序表程序 C语言

/* 2017.10.15第一次编译 2017.10.17 修改 添加姓名搜索功能 2017.10.18 修改 修改new函数外观 */ #include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<string.h> typedef struct { char num[20]; char name[20]; int score; }Node; typedef struct { Node *Elem; int max; }List; int a=-1; void new() { puts(" ***************************************** "); puts(" * 欢迎进入学生信息统计 * "); puts(" * 1.输入学生的人数 * "); puts(" * 2.显示学生信息 * "); puts(" * 3.根据姓名检索学生信息 * "); puts(" * 4.显示指定学生信息 * "); puts(" * 5.在指定位置插入学生信息 * "); puts(" * 6.删除指定位置学生信息 * "); puts(" * 7.统计学生个数信息 * "); puts(" * 8.输入ctrl+Z 或者 exit退出程序 * "); puts(" ***************************************** "); } void ListInsert(List L,int ad,Node p) //在指定位置之后插入 { int i; for(i=a;i>ad;i--) { L.Elem[i+1]=L.Elem[i]; L.Elem[ad+1] = p; } } void ListDelete(int n,List L) //删除指定位置的信息 { int i; for(i=a;i<=a;i++) L.Elem[i]=L.Elem[i+1]; } void InitList(int n,List L) //录入信息 { int i; for (i = 1;i<=n;i++) { printf("plz input number:"); scanf("%s",L.Elem[i].num); printf("plz input name:"); scanf("%s",L.Elem[i].name); printf("plz input score:"); scanf("%s",L.Elem[i].score); put("Input complete"); } Node polling(int ad,List L) //学号查询 { return L.Elem[ad]; } int SearchName(char nam,List L,Node p) //姓名查询 { int i; for(i=1;i<=a;i++) { if(strcmp(L.Elem[i].name,nam)==0) { p = L.Elem[i]; } else return 0; } int main() { int SearchName(); void InitList(); char cmp[20]; new(); int a1,a2; int ad; List L; L.max = 999; Node p; L.Elem = (Node *)malloc(sizeof (Node)*L.max); while(1) { printf("请输入菜单号:"); scanf("%d",a1); if(a1<1||a1>7) { puts("error\n"); continue; } if((a1!=1&&a1!=1)&&a == -1) { puts("您还未录入学生信息!ERROR!"); continue; } switch(a2) { case 1: if(a !=-1) { printf("您已经输入过学生信息"); break; } printf("请输入学生人数(0~999):"); scanf("%d",&a); if(a<=0||a>999) { printf("输入非法,请重新输入\n"); continue; } InitList(a,L); puts(""); break; case 2: printf("学号\t 姓名\t 成绩\n"); for(i = 1;i <= a;i++) { p=polling(i,L); printf("%s\t\t %s\t\t%d\t\t",p.num,p.name,p.score); } printf("OK\n"); break; case 3: scanf("%s",cmp); if(SearchName(cmp,L,p)) { puts("查找成功!"); puts("输出为:"); printf("学号:%s,\t 姓名:%s\t 成绩:%s\t",p.num,p.name,p.score); } else puts("查无此人\n"); printf("OK\n"); break; case 4: printf("请输入要查询的人的序号:"); scanf("%d",&i); if(i>a||i<=0) { puts("ERROR"); puts(""); break; } puts("查找成功"); puts("学生信息马上输出"); p=polling(i,L); printf("%s\t\t %s\t\t,&d\t\t",p.num,p.name,p.score); printf("OK!"); puts(""); break; case 5 : if(a == 999) { puts("对不起,顺序表已满,无法进行任何操作,请先删除无关数据"); puts(""); continue; } printf("请输入要插入的位置,数值(0~学生最大数"); while(scanf("%d",&ad)) { if(ad >999 && ad < 0) printf("输入非法,请重新输入:"); else break; } printf("请输入学号:"); scanf("%s",p.num); printf("请输入姓名:"); scanf("%s",p.name); printf("请输入成绩:"); scanf("%d",p.score); ListInsert(L,ad,p); a++; printf("OK"); printf("\n"); break; case 7: printf("学生总数为:%d",a); printf("OK!"); printf("\n"); break; } } printf("程序结束 按CTRL+z退出"); return 0; } 源代码如下 为什么总是出现两个错误,求大哥帮忙解决!

数据结构初学者遇到的顺序表问题

我的这段程序(已简化)为什么不能在屏幕上输出啊,求帮忙。以下图片和代码就是出现的问题 #include<iostream> using namespace std; #define MAXSIZE 50 typedef int Elemtype; struct celltype { Elemtype data[MAXSIZE]; int length; }; void Creat_List(celltype &L) //创建一个表(参数为引用) { int n; cout<<"你要输入表的长度:"; cin>>n; cout<<"输入你表中的元素:"; for(int i=0;i<n;i++) { cin>>L.data[i]; L.length++; } } void Show_List(celltype &L) //向屏幕输出(参数为引用) { cout<<"顺序表如下"<<endl; for(int i=0;i<L.length;i++) cout<<L.data[i]<<"\t"; cout<<endl; } int main() { celltype L; //定义一个结构体变量 Creat_List(L); Show_List(L); getchar(); //用来暂停 getchar(); return 0; } ![图片](https://img-ask.csdn.net/upload/201703/05/1488703910_545234.jpg)

jmu ds 顺序表的基本操作

![图片说明](https://img-ask.csdn.net/upload/201710/12/1507813705_223578.png) ![图片说明](https://img-ask.csdn.net/upload/201710/12/1507813730_726971.png) 做了n遍,测试点永远过不去 代码写过c和java的 题目的意图不明,不过估计默认情况下元素数量和字母a的数量都是可以满足要求的 ``` import java.util.*; import java.math.BigInteger; public class Main { public static void main(String[] args) { List<String> list=new ArrayList<>(); int n; Scanner in=new Scanner(System.in); n=in.nextInt(); for(int i=0;i<n;i++) { String temp; temp=in.next(); list.add(temp); } in.close(); for(int i=0;i<list.size();i++) { if(0==i) System.out.print(list.get(i)); else System.out.print(" "+list.get(i)); } System.out.println(); System.out.println(list.size()); if(list.isEmpty()) System.out.println("yes"); else System.out.println("no"); System.out.println(list.get(2)); for(int i=0;i<list.size();i++) { if(list.get(i).equals("a")) { System.out.println(i+1); break; } } list.add(3,"f"); for(int i=0;i<list.size();i++) { if(0==i) System.out.print(list.get(i)); else System.out.print(" "+list.get(i)); } System.out.println(); list.remove(2); for(int i=0;i<list.size();i++) { if(0==i) System.out.print(list.get(i)); else System.out.print(" "+list.get(i)); } System.out.println(); return; } } ``` ``` #include <stdio.h> #include <string.h> #include <stdbool.h> #include <stdlib.h> #define INF 0x7fffffff #define MAXN 110 typedef char ElementType; struct MyStruct { ElementType *arr; int cnt; }; typedef struct MyStruct list; ElementType MAX(ElementType A, ElementType B) { return A > B ? A : B; } ElementType MIN(ElementType A, ElementType B) { return A < B ? A : B; } list ReadAndCreate(void) { int n, i; char temp[81]; list l; scanf("%d", &n); l.cnt = n; l.arr = (ElementType*)malloc(n * sizeof(ElementType)); for (i = 0; i < n; i++) { scanf("%s", temp); l.arr[i] = temp[0]; } return l; } void PrintN(list l) { if (0 == l.cnt) return; int i; for (i = 0; i < l.cnt; i++) { if (0 == i) printf("%c", l.arr[i]); else printf(" %c", l.arr[i]); } printf("\n"); } void PrintLength(list l) { printf("%d\n", l.cnt); } bool IsEmpty(list l) { if (l.cnt <= 0) return true; else return false; } void Print3(list l) { if (l.cnt < 3) return; printf("%c\n", l.arr[2]); return; } void Print_a_location(list l) { int i; bool flag; flag = true; for (i = 0; i < l.cnt; i++) { if ('a' == l.arr[i]) { if (flag) { printf("%d", i + 1); flag = false; } else printf(" %d", i + 1); } } if (!flag) printf("\n"); return; } void Insert_f(list *l) { if (l->cnt < 3) return; int i; l->arr = (ElementType*)realloc(l->arr,(++l->cnt) * sizeof(ElementType)); for (i = l->cnt - 1; i >= 4; i--) l->arr[i] = l->arr[i - 1]; l->arr[3] = 'f'; return; } void Delete3(list *l) { if (l->cnt < 3) return; int i, j; ElementType *t; t = l->arr; l->arr = (ElementType*)malloc((--l->cnt) * sizeof(ElementType)); for (i = 0; i < l->cnt; i++) { if (i < 2) l->arr[i] = t[i]; else l->arr[i] = t[i + 1]; } free(t); return; } int main() { list l; l.arr = NULL; l.cnt = 0; l = ReadAndCreate(); PrintN(l); PrintLength(l); if (IsEmpty(l)) printf("yes\n"); else printf("no\n"); Print3(l); Print_a_location(l); Insert_f(&l); PrintN(l); Delete3(&l); PrintN(l); free(l.arr); l.cnt = 0; getchar(); getchar(); return 0; } ```

数据结构中,顺序表删除一个元素,为什么不能空出来那个位置

1.数据结构中,顺序表删除一个元素,为什么不能空出来那个位置 必须要把后面的元素都向前移一位,进行补全??只是为了节省空间? 2.顺序表的读取原理到底是什么?是不是在增加元素时顺便记录下它的序号,然后 在读取时根据序号和首元素地址来推算出它的地址,再读取?? (书本上介绍的太浅,仍然看不懂原理) 希望好心大佬来回答一下,十分感谢!!!!!

学生顺序表的处理。。。看清楚是顺序表!!!

课题内容: 在一个数据文件中存放若干学生数据记录,每条记录都有如下数据项:学号,姓名,性别,成绩。 编一个程序,采用 顺序存储结构 存储这批数据,并对该数据进行排序。要求:数组前部为男同学,后部为女同学,并且男女同学都按成绩递减排序,分别计算男生合格率、女生合格率、全班的成绩平均分,并把排序后的学生数据记录及计算结果存入另一个数据文件中。 先用一个Seqlist.cpp定义学生成绩信息顺序表的类型和基本运算函数 #include <stdio.h> #include <stdlib.h> #define MAX 50 typedef struct{ int xh; /*学号*/ char name[20]; /*姓名*/ int sex; /*性别,0为男生,1为女生*/ float score; /*成绩*/ }datatype; typedef struct{ datatype data[MAX];/*存放顺序表元素的数组*/ int last; /*表示data中实际存放元素个数*/ }Seqlist; void initList(Seqlist *lp);/*置一个空表*/ void createList(Seqlist *lp);/*建一个学生顺序表*/ void sort_score(Seqlist *lp);/*按成绩排降序*/ void Error(char *s);/*自定义错误处理函数*/ void pntList(Seqlist *lp);/*输出学生顺序表*/ void save(Seqlist *lp,char strname[]);/*保存学生顺序表到指定文件*/ /*置一个空表*/ void initList(Seqlist *lp) { lp->last=0; } /*建一个学生顺序表*/ void createList(Seqlist *lp) { FILE *fp; int xh,sex; char name; float score; if((fp=fopen("records.txt","r"))==NULL) { Error("can not open file !"); } while(!feof(fp)) { fscanf(fp,"%d%f%s%d",&xh,name,&score,&sex); lp->data[lp->last].xh=xh; lp->data[lp->last].score=score; lp->data[lp->last].sex=sex; lp->last++; } fclose(fp); } /*按成绩排降序*/ void sort_score(Seqlist *lp) { int i,j,k; datatype t; for(i=1;i<lp->last;i++) { k=i; for(j=i+1;j<=lp->last;j++) if(lp->data[j].score>lp->data[k].score) k=j; if(k!=i) { t=lp->data[k]; lp->data[k]=lp->data[i]; lp->data[i]=t; } } } /*自定义错误处理函数*/ void Error(char *s) { printf("\n %s", s); exit(1); /*返回OS,该函数定义在stdlib.h中*/ } /*输出学生顺序表*/ void pntList(Seqlist *lp) { int i; for(i=0;i<lp->last;i++) printf("%2d: %s %5.2f %d\n",lp->data[i].xh,lp->data[i].name,lp->data[i].score,lp->data[i].sex); } /*保存学生顺序表到指定文件*/ void save(Seqlist *lp,char strname[]) { FILE *fp; int i; if((fp=fopen(strname,"w"))==NULL) { Error("can not open file !"); } for(i=0;i<lp->last ;i++) { fprintf(fp,"%2d %s %5.2f %d\n",lp->data[i].xh,lp->data[i].name,lp->data[i].score,lp->data[i].sex); } fclose(fp); } 接下去的主函数要调用Seqlist.cpp,请问接下去的主函数怎么写(给出相关函数,手写有50C币)

C++数据结构分别用顺序表和单链表的存储形式

分别用顺序表和单链表的存储形式实现将输入的两个大整数(超过20位)相加并打印和值;自行设计基本操作,要求两种存储结构中操作接口相同

题目:学生顺序表的处理

在一个数据文件中存放若干学生数据记录,每条记录都有如下数据项:学号,姓名,性别,成绩。 编一个程序,采用 顺序存储结构 存储这批数据,并对该数据进行排序。要求:数组前部为男同学,后部为女同学,并且男女同学都按成绩递减排序,分别计算男生合格率、女生合格率、全班的成绩平均分,并把排序后的学生数据记录及计算结果存入另一个数据文件中。

C数据结构顺序表操作问题

两种操作方式 一、利用点运算符访问 ``` #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef struct { int data[MAXSIZE]; //存放数组元素 int last; //数组的最后一个元素的下标 }squeuelist; squeuelist l={0}; int main(void) { int choice=0, mount=0, i=0, dat=0, pos=0; while(1) { printf(" 线性顺序表操作练习\n"); printf("1.创建一个顺序表\n"); printf("2.插入数据\n"); printf("3.删除数据\n"); printf("4.打印顺序表\n"); printf("5.退出\n"); printf("请输入你的选择(1-5):"); scanf("%d",&choice); switch(choice) { case 1: printf("请输入你要创建的元素个数:"); scanf("%d", &mount); if(mount>MAXSIZE) { printf("创建的个数大于规定范围!"); break; } printf("请输入数据:"); for(i=0; i<mount; i++) { scanf("%d",&l.data[i]); } l.last = mount-1; break; //插入操作 case 2: printf("请输入要插入的元素值及所在位置(位置1表示元素0,依次类推):"); scanf("%d %d", &dat, &pos); if(l.last>MAXSIZE-1) { printf("空间溢出!\n"); break; } else if(pos<1 || pos>l.last+2) { printf("插入的位置非法!\n"); break; } else { for(i=l.last; i>=pos-1;i--) { l.data[i+1] = l.data[i]; } l.data[pos-1] = dat; l.last += 1; } break; //删除操作 case 3: printf("请输入你要删除元素所在的位置(位置1代表元素0,依次类推):"); scanf("%d",&pos); if(pos<1 || pos>l.last+1) { printf("输入的位置无效!\n"); break; } else { for(i=pos; i<=l.last; i++) { l.data[i-1] = l.data[i]; } l.last -= 1; } break; //打印输出顺序表 case 4: if (mount<=0) { printf("No data!\n"); break; } printf("顺序表为:"); for(i=0; i<=l.last; i++) { printf("%d ", l.data[i]); } printf("\n"); printf("顺序表的个数为:%d\n",l.last+1); break; //退出程序 case 5: exit(0); break; default: break; } } return 1; } ``` 这种访问方式能够成功! 第二种方式利用指针访问 ``` #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef struct { int data[MAXSIZE]; //存放数组元素 int last; //数组的最后一个元素的下标 }squeuelist; squeuelist *l=NULL; int main(void) { int choice=0, mount=0, i=0, dat=0, pos=0; while(1) { printf(" 线性顺序表操作练习\n"); printf("1.创建一个顺序表\n"); printf("2.插入数据\n"); printf("3.删除数据\n"); printf("4.打印顺序表\n"); printf("5.退出\n"); printf("请输入你的选择(1-5):"); scanf("%d",&choice); switch(choice) { case 1: printf("请输入你要创建的元素个数:"); scanf("%d", &mount); if(mount>MAXSIZE) { printf("创建的个数大于规定范围!"); break; } printf("请输入数据:"); for(i=0; i<mount; i++) { scanf("%d",&l->data[i]); } l->last = mount-1; break; //插入操作 case 2: printf("请输入要插入的元素值及所在位置(位置1表示元素0,依次类推):"); scanf("%d %d", &dat, &pos); if(l->last>MAXSIZE-1) { printf("空间溢出!\n"); break; } else if(pos<1 || pos>l->last+2) { printf("插入的位置非法!\n"); break; } else { for(i=l->last; i>=pos-1;i--) { l->data[i+1] = l->data[i]; } l->data[pos-1] = dat; l->last += 1; } break; //删除操作 case 3: printf("请输入你要删除元素所在的位置(位置1代表元素0,依次类推):"); scanf("%d",&pos); if(pos<1 || pos>l->last+1) { printf("输入的位置无效!\n"); break; } else { for(i=pos; i<=l->last; i++) { l->data[i-1] = l->data[i]; } l->last -= 1; } break; //打印输出顺序表 case 4: if (mount<=0) { printf("顺序表无数据!\n"); break; } printf("顺序表为:"); for(i=0; i<=l->last; i++) { printf("%d ", l->data[i]); } printf("\n"); printf("顺序表的个数为:%d\n",l->last+1); break; //退出程序 case 5: exit(0); break; default: break; } } return 1; } ``` 当运行创建一个顺序表时,显示出错,报指令引用的“0x00000000”内存,该内存不能被“written”。 求大神帮忙分析下~

数据结构顺序表查找操作

``` Status LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType)) { ElemType *p; int i=1; p = L.elem ; while(i<=L.length &&!compare(*p++,e)) ++i; if(i<=L.length) return i; else return Error; } ``` ``` Status(*compare)(ElemType,ElemType) ``` 这个是什么意思,要执行这个子函数要怎么传值?

c语言 数据结构合并有序顺序表

请大神帮忙看看为什么运行出来后面会有一串奇怪的数 #include<stdio.h> #include<stdlib.h> #define MAXSIZE 10 typedef struct { int elem[MAXSIZE]; int len; }sqlist; void merge(sqlist *la,sqlist *lb,sqlist *lc) { int i,j,k; i=j=k=0; if(la->len+lb->len<=MAXSIZE) { while(i<la->len&&j<lb->len) { if(la->elem[i]<lb->elem[j]) { lc->elem[k]=la->elem[i]; i++; k++; } else if (la->elem[i]>lb->elem[j]) { lc->elem[k]=lb->elem[j]; j++; k++; } else { lc->elem[k]=lb->elem[j]; i++; j++; k++; } } while(i<la->len) { lc->elem[k]=la->elem[i]; i++; k++; } while(j<lb->len) { lc->elem[k]=lb->elem[j]; j++; k++; } lc->len=la->len+lb->len; } else printf("out of bound"); } void print(sqlist *l) { int i; for(i=0;i<l->len;i++) { printf("%d ",l->elem[i]); } } int main() { int i; sqlist la={{1,2,5,8,9},5}; sqlist lb={{2,4,7,18,21},5}; sqlist lc={{0},0}; merge(&la,&lb,&lc); print(&lc); return(0); }

数据结构顺序表的问题

新手刚学数据结构,想在机子上敲一下。 但是敲到给L分配空间时编译器报错,当我把MAX替换成数字时,错误就没了,有没有大神告诉我这是怎么回事 #include<stdio.h> #include<stdlib.h> #define MAX 100; #define LISRINCREMENT 10; typedef int Status; typedef struct { int *elem; int length; int listsize }SqList; SqList L; Status InitList(SqList *L) { L->elem = (int*)malloc(MAX*sizeof(int)); }

C语言学生选课管理 顺序表实现 数据结构课程设计

学生选课管理系统 用顺序表实现 ◆问题描述   设计一个计算机管理完成的学生选课信息基本业务。 ◆要求 课程信息包括:课程编号、课程名称、课程性质、总学时、学分、课程人数上限。 选课信息包括:学号、姓名、选修课程编号、成绩。 (1)录入、删除、修改课程信息。 (2)录入、删除、修改选课信息。 (3)查询、统计选课信息(按学号、学分等); (4)排序。

数据结构顺序表合并中指针怎么用才能运行?

已知线性表LA和LB中的数据元素按值非递减有序,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列.![图片说明](https://img-ask.csdn.net/upload/201604/20/1461156703_331210.png) 怎么改呢? 初学,数据结构小白![图片说明](https://img-ask.csdn.net/upload/201604/20/1461156776_917564.png) 额。。,用的顺序表

数据结构顺序表 求指教!

1.typedef struct{ char* stuNo; char* stuName; char* stuSex; int mathScore; int chinScoee; }DataType; 2.typedef struct{ DataType *data; //一维数组data用于存放表节点 int length; //线性表当前的长度 }SeqList; 1中的DataType和2中的SeqList意思一样吗? 不一样的话分别代表什么意思? 谢谢!

数据结构中如何删除顺序表中从某一个指定的数据到另一个指定数据之间的所有数据

数据结构中如何删除顺序表中从某一个指定的数据到另一个指定数据之间的所有数据

数据结构C语言顺序表的排序和删除问题

顺序表定义的长度为10000,此时程序可以正常运行;把顺序表长度改成500000,程序出错,不能运行。求问大神是哪里出了错误,还是要提高存储上限?如何改正?#include <stdio.h> #include <stdlib.h> #include <time.h> typedef int ElemType; #define MAX 10000 typedef struct{ ElemType *elem; int length; }SqList; void InitList(SqList &L){ L.elem = (ElemType *)malloc(MAX*sizeof(ElemType)); free(L.elem); L.elem = (ElemType *)malloc(MAX*sizeof(ElemType)); L.length = MAX; }//初始化顺序表 void Merge(ElemType SR[],ElemType TR[],int i,int m ,int n){ int j,k; for(j=m+1,k=i;i<=m&&j<=n;k++){ if(SR[i]<=SR[j]) TR[k]=SR[i++]; else TR[k] = SR[j++]; } while(i<=m) TR[k++] = SR[i++]; while(j<=n) TR[k++] = SR[j++]; }// 将有序的SR[i..m]和SR[m+1..n]归并为有序的TR[i..n] void Msort( ElemType SR[], ElemType TR1[], int s, int t ){ int k; ElemType TR2[MAX]; if(s==t) TR1[s] = SR[s]; else { k = (s+t)/2; Msort(SR,TR2,s,k); Msort(SR,TR2,k+1,t); Merge(TR2,TR1,s,k,t); } }// 对SR[s..t]进行归并排序,排序后的记录存入TR1[s..t] void SelectSort(SqList &L){ int i,j,k; ElemType temp; int n=L.length; for(i=1;i<n;i++){ k = i; for(j=i+1;j<=n;j++) if(L.elem[j]<L.elem[k]) k=j; if(i!=k){ temp = L.elem[i]; L.elem[i] = L.elem[k]; L.elem[k] = temp; } } }//简单选择排序的实现 int QKPass(ElemType s[],int left,int right){ ElemType x = s[left]; while(left<right){ while(left<right && s[right]>=x){ right--; } if(left<right){ s[left] = s[right]; left++; } while(left<right && s[left]<=x){ left++; } if(left<right){ s[right] = s[left]; right--; } } s[left] = x; return left; }//一趟快速排序算法 void HeapAdjust (SqList &H, int s, int m){ H.elem[0] = H.elem[s]; int j; H.elem[0] = H.elem[s]; for(j = 2*s ; j<=m; j*=2){ if(j<m && H.elem[j]<H.elem[j+1]) j++; if(H.elem[0]>=H.elem[j]) break; H.elem[s] = H.elem[j]; s = j; } H.elem[s] = H.elem[0]; }//保存大顶堆的根元素后,对大顶堆的调整 void HeapSort (SqList &H){ int i ; ElemType temp; for(i=H.length/2;i>1;i--) HeapAdjust(H,i,H.length); temp = H.elem[0]; H.elem[0] = H.elem[H.length]; H.elem[H.length] = temp; for(i = H.length-1;i>1;i--){ HeapAdjust(H,1,i); temp = H.elem[1]; H.elem[1] = H.elem[i]; H.elem[i] = temp; } }//建立大顶堆,实现堆排序 void BubbleSort(SqList &L){ int n = L.length,change = 1; int i,j; ElemType temp; for(i=1;i<n && change;i++){ change = 0; for(j=1;j<=n-i;j++) if(L.elem[i]>L.elem[j]){ temp = L.elem[i]; L.elem[i] = L.elem[j]; L.elem[j] = temp; change = 1; } } }//冒泡排序算法实现 void QKsort(ElemType s[],int low,int high){ int pos; if(low<high){ pos = QKPass(s,low,high); QKsort(s,low,pos-1); QKsort(s,pos+1,high); } }//递归实现快序排序 void DeleteItem(SqList &L,ElemType item){ int i; for(i=1;i<L.length;i++) if(L.elem[i]==item){ L.elem[i] = L.elem[--L.length]; free(&L.elem[L.length]); } }//删除与item相同元素 int main(){ double t1,t2; int i; SqList L1,L2; int k; printf("**************************************\n"); printf("0、退出\n"); printf("1、二路归并排序\n"); printf("2、堆排序\n"); printf("3、冒泡排序\n"); printf("4、快速排序\n"); printf("5、直接插入排序\n"); printf("6、删除与Item相同元素\n"); printf("**************************************\n"); do{ InitList(L1); InitList(L2); scanf("%d",&k); for(i=1;i<L1.length;i++) L1.elem[i] = rand()%MAX; for(i=1;i<L2.length;i++) L2.elem[i]=i; switch(k){ case 0:break; case 1: printf("\n********二路归并排序******\n"); t1=clock(); Msort(L1.elem,L1.elem,1,L1.length-1); t1 = clock() - t1; t2=clock(); Msort(L2.elem,L2.elem,1,L2.length-1); t2 = clock()- t2; break; case 2: printf("\n**********堆排序*********\n"); t1=clock(); HeapSort(L1); t1 = clock() - t1; t2=clock(); HeapSort(L2); t2=clock() - t2; break; case 3: printf("\n*********冒泡排序********\n"); t1=clock(); BubbleSort(L1); t1 = clock() - t1; t2=clock(); BubbleSort(L2); t2=clock() - t2; break; case 4: printf("\n*********快速排序********\n"); t1=clock(); QKsort(L1.elem,1,L1.length-1); t1 = clock() - t1; t2=clock(); QKsort(L2.elem,1,L2.length-1); t2=clock() - t2; break; case 5: printf("\n********直接插入排序******\n"); t1=clock(); SelectSort(L1); t1 = clock() - t1; t2=clock(); SelectSort(L2); t2=clock() - t2; break; case 6: t1=clock(); DeleteItem(L1,5); t1=clock()-t1; for(i=1;i<L1.length;i++) printf("%d ",L1.elem[i]); break; default : printf("\n输入错误!\n\n"); } if(0<k&&k<6){ printf("\n该排序无序表排序时间:%f毫秒\n",(double)t1); printf("\n该排序有序表排序时间:%f毫秒\n\n",(double)t2); } else if(k==6) printf("\n删除元素的时间为%f毫秒\n",(double)t1); }while(k!=0); return 0; }

数据结构的顺序表问题

我是按照书上看的 为什么在vs2017中显示 void createlist(sqlist *&L,elemtype a[],int n); 中的(sqlist *&L)显示语法错误,求解释

数据结构顺序表,存储空间已满,增加分配

``` if(L.length>=L.listsize) /* 当前存储空间已满,增加分配 */ { newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase) return Error;; /* 存储分配失败 */ L.elem=newbase; /* 新基址 */ L.listsize+=LISTINCREMENT; /* 增加存储容量 */ } ``` 上面这是正确的,怎么改成下面的就错了?? ``` if(L.length>=L.listsize) { newbase= new ElemType[L.listsize+LISTINCREMENT]; if(!newbase) return Error; L.elem=newbase; L.listsize+=LISTINCREMENT; } /*判断存储空间是否已满,增加储存容量*/ ``` ``` #include<stdio.h> #include<stdlib.h> #include<string.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define Error 0 typedef int Status; typedef int Boolean; typedef int ElemType; #define LIST_INIT_SIZE 10 #define LISTINCREMENT 10 typedef struct { ElemType *elem; int length; int listsize; char name[10]; }SqList; /*创建结构体(Sqlist)*/ int Empty(SqList L) { if(L.length==0) return TRUE; return FALSE; } /*创建子函数(子程序),这是用来判断顺序表是否为空*/ Status InitList(SqList &L) { L.elem=new ElemType[LIST_INIT_SIZE]; if(!L.elem) return Error; L.length=0; L.listsize=LIST_INIT_SIZE; return OK; } /*初始化顺序表,产生一个新的存储空间*/ Status ListInsert(SqList &L,int i,ElemType e) { ElemType *newbase,*q,*p; if(i<1||i>L.length+1) return Error; /*判断i值是否合法*/ if(L.length>=L.listsize) { newbase= new ElemType[L.listsize+LISTINCREMENT]; if(!newbase) return Error; L.elem=newbase; L.listsize+=LISTINCREMENT; } /*判断存储空间是否已满,增加储存容量*/ q=L.elem +i-1; for(p=L.elem+L.length-1;p>=q;--p) *(p+1)=*p; *q=e; ++L.length; return OK; //插入算法 } Status ListDelete(SqList &L,int i,ElemType *e) { ElemType *p,*q; if(i<1||i>L.length) return Error; if(Empty(L)) {printf("empty\n");return Error;} p=L.elem+i-1; *e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p) *(p-1)=*p; L.length--; return OK; //删除算法 } void output(SqList L){ int i; if (L.length==0)printf("error\n"); for(i=0;i<L.length;i++) printf("%d " ,L.elem[i]); printf("\n"); } main(){ int i;int x; SqList L; if(InitList(L)==Error) {printf("ERRor\n"); return Error;} // if(Empty(L)) printf("empty\n"); ListInsert(L,1,90); for(i=2;i<20;i++) ListInsert(L,1,i); output(L); /*ListDelete(L,1,&x); printf("%d\n",x); output(L);*/ } ```

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Linux面试题(2020最新版)

文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的进程间通信方式?Linux 有哪些系统日志文件?Linux系统安装多个桌面环境有帮助吗?什么是交换空间?什么是root帐户什么是LILO?什...

Linux命令学习神器!命令看不懂直接给你解释!

大家都知道,Linux 系统有非常多的命令,而且每个命令又有非常多的用法,想要全部记住所有命令的所有用法,恐怕是一件不可能完成的任务。 一般情况下,我们学习一个命令时,要么直接百度去搜索它的用法,要么就直接用 man 命令去查看守冗长的帮助手册。这两个都可以实现我们的目标,但有没有更简便的方式呢? 答案是必须有的!今天给大家推荐一款有趣而实用学习神器 — kmdr,让你解锁 Linux 学习新姿势...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

史上最全的 python 基础知识汇总篇,没有比这再全面的了,建议收藏

网友们有福了,小编终于把基础篇的内容全部涉略了一遍,这是一篇关于基础知识的汇总的文章,请朋友们收下,不用客气,不过文章篇幅肯能会有点长,耐心阅读吧爬虫(七十)多进程multiproces...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...

蒋凡是何许人也? 2017年12月27日,在入职4年时间里,蒋凡开挂般坐上了淘宝总裁位置。 为此,时任阿里CEO张勇在任命书中力赞: 蒋凡加入阿里,始终保持创业者的冲劲,有敏锐的...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

新一代神器STM32CubeMonitor介绍、下载、安装和使用教程

关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang最近ST官网悄悄新上线了一款比较强大的工具:STM32CubeMonitor V1.0.0。经过我研究和使用之...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

大学一路走来,学习互联网全靠这几个网站,最终拿下了一把offer

大佬原来都是这样炼成的

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

什么时候跳槽,为什么离职,你想好了么?

都是出来打工的,多为自己着想

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你期望月薪4万,出门右拐,不送,这几个点,你也就是个初级的水平

先来看几个问题通过注解的方式注入依赖对象,介绍一下你知道的几种方式@Autowired和@Resource有何区别说一下@Autowired查找候选者的...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

立即提问
相关内容推荐