今天用sort函数对list排序,我传的是三个参数,却出现了这种报错,没听过sort要四个参数的啊 2C

error C2780: “void std::_Sort(_RanIt,_RanIt,_Diff,_Pr)”: 应输入 4 个参数,却提供了 3 个

c++

3个回答

检查下是否使用的是std::list,如果是,那么应该调用std::list::sort函数而不是std::sort函数

还少一个函数指针,用来传给排序函数告诉它待排序数据比较的规则。

 // sort algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::sort
#include <vector>       // std::vector

bool myfunction (int i,int j) { return (i<j); }

struct myclass {
  bool operator() (int i,int j) { return (i<j);}
} myobject;

int main () {
  int myints[] = {32,71,12,45,26,80,53,33};
  std::vector<int> myvector (myints, myints+8);               // 32 71 12 45 26 80 53 33

  // using default comparison (operator <):
  std::sort (myvector.begin(), myvector.begin()+4);           //(12 32 45 71)26 80 53 33

  // using function as comp
  std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)

  // using object as comp
  std::sort (myvector.begin(), myvector.end(), myobject);     //(12 26 32 33 45 53 71 80)

  // print out content:
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
sort函数参数排序问题
代码为: struct compHCodeID { public: bool operator()(DataStruct& _X,DataStruct& _Y) { return _X.strCodeID<_Y.strCodeID; } }; std::list<DataStruct> m_sortDataList; //历史排序链表 m_sortDataList.sort(compHCodeID().operator()); 报错为:error C2664: 'void __thiscall std::list<struct std::tagDATASTRUCT,class std::allocator<struct std::tagDATASTRUCT> >::sort(struct std::greater<struct std::tagDATASTRUCT>)' : cannot convert paramete r 1 from 'bool (struct std::tagDATASTRUCT &,struct std::tagDATASTRUCT &)' to 'struct std::greater<struct std::tagDATASTRUCT>'
在sort函数中的使用lambda进行条件排序导致list被置0
本来写了一个def,想着dug一下,然后就发现问题了。 def DeleteArraylementsAccordingToPercentage(lorddata,percentage,name): #按照百分比删除数组元素,并返回第二个数据 array = [] openpklfile = open(lorddata + '.pkl','rb') start = pickle.load(openpklfile) start.sort(start,key = lambda x:x[1]) lenth = len(start) * float(percentage) for i in range(lenth): del start[i] savefile = open(name + '.pkl', 'wb') pickle.dump(start, savefile) savefile.close() openpklfile.close()![图片说明](https://img-ask.csdn.net/upload/201806/04/1528093017_695621.png)
关于java中Collections.sort()排序问题,求大神帮忙
public class Lock { private int lock;// lock有两个值:0 unlock ; 1 lock private String name; public int getLock() { return lock; } public void setLock(int lock) { this.lock = lock; } public String getName() { return name; } public void setName(String name) { this.name = name; } } *** public class Test{ public static void main(String[] args) { List<Lock> list = getLockDao(参数);//从数据库中查询出所有Lock,并放在一个list里面 } } 现在我想要用Collections.sort()给这个list排序,当lock的值为0时,对应的数据排在前面,lock的值为1时,对应的数据排在后面,请问该怎么写,以上代码都固定了,不能更改,只能写比较函数,求大神指教
List的sort()方法这样写对吗?
class M{ int age; 构造函数; toString()方法; } main(){ List st=new ArrayList(); st.sort((o1,o2)->{M m1=(M)o1;M m2=(M)o2;//按照年龄降序排列 return m1.age>m2.age?-1:m1.age<m2.age?1:0});这样写对吗? 另外,对于TreeSet以同样的lambda表达式定义排序规则: class M{ int age; 构造函数; toString()方法; } main(){ TreeSet st=new TreeSet((o1,o2)->{M m1=(M)o1;M m2=(M)o2; return m1.age>m2.age?-1:m1.age<m2.age?1:0}); 只要定义了排序规则,存入的元素就会以此规则自动排序,这个功能是哪段代码实现的?因为书上提到Comparator接口的int compare()方法,但是具体是什么联系呢?lambda表达式是重写了这个int compare()方法吗?
timeit,Timer 传入带多参数函数,提示参数未定义
写了个归并排序,在此基础上做了一个修改版本,相比较两个版本的耗时,结果运行的时候却提示lis没有定义: 代码如下: ``` from timeit import Timer def back_sort(lis): n= len(lis) if n == 1: return (lis) mid = n//2 left_sorted = back_sort(lis[:mid]) right_sorted = back_sort(lis[mid:]) n_left = len(left_sorted) n_right = len(right_sorted) left_start = 0 right_start = 0 merged_lis = [] while left_start < n_left and right_start <n_right: if left_sorted[left_start] <= right_sorted[right_start]: merged_lis.append(left_sorted[left_start]) left_start += 1 else: merged_lis.append(right_sorted[right_start]) right_start += 1 merged_lis += left_sorted[left_start:] merged_lis += right_sorted[right_start:] return merged_lis def merge_sort(lis,start,end): if start == end: return [lis[start]] mid = (start+end)//2 right_sorted = merge_sort(lis,mid+1,end) left_sorted = merge_sort(lis,start,mid) n_left = len(left_sorted) n_right = len(right_sorted) left_start = 0 right_start = 0 merged_lis = [] while left_start < n_left and right_start <n_right: if left_sorted[left_start] <= right_sorted[right_start]: merged_lis.append(left_sorted[left_start]) left_start += 1 else: merged_lis.append(right_sorted[right_start]) right_start += 1 merged_lis += left_sorted[left_start:] merged_lis += right_sorted[right_start:] #print(merged_lis) return merged_lis if __name__ == "__main__": lis = [49,38,65,97,76,13,27,49] n = len(lis)-1 print(back_sort(lis)) print(merge_sort(lis,0,n)) t1 = Timer('back_sort(lis)', 'from __main__ import back_sort') t2 = Timer('merge_sort(lis,0,n)', 'from __main__ import merge_sort') print(t1.timeit(number=1000)) print(t2.timeit(number=1000)) ``` 源码如下: ``` #! /usr/bin/env python3 """Tool for measuring execution time of small code snippets. This module avoids a number of common traps for measuring execution times. See also Tim Peters' introduction to the Algorithms chapter in the Python Cookbook, published by O'Reilly. Library usage: see the Timer class. Command line usage: python timeit.py [-n N] [-r N] [-s S] [-t] [-c] [-p] [-h] [--] [statement] Options: -n/--number N: how many times to execute 'statement' (default: see below) -r/--repeat N: how many times to repeat the timer (default 3) -s/--setup S: statement to be executed once initially (default 'pass') -p/--process: use time.process_time() (default is time.perf_counter()) -t/--time: use time.time() (deprecated) -c/--clock: use time.clock() (deprecated) -v/--verbose: print raw timing results; repeat for more digits precision -h/--help: print this usage message and exit --: separate options from statement, use when statement starts with - statement: statement to be timed (default 'pass') A multi-line statement may be given by specifying each line as a separate argument; indented lines are possible by enclosing an argument in quotes and using leading spaces. Multiple -s options are treated similarly. If -n is not given, a suitable number of loops is calculated by trying successive powers of 10 until the total time is at least 0.2 seconds. Note: there is a certain baseline overhead associated with executing a pass statement. It differs between versions. The code here doesn't try to hide it, but you should be aware of it. The baseline overhead can be measured by invoking the program without arguments. Classes: Timer Functions: timeit(string, string) -> float repeat(string, string) -> list default_timer() -> float """ import gc import sys import time import itertools __all__ = ["Timer", "timeit", "repeat", "default_timer"] dummy_src_name = "<timeit-src>" default_number = 1000000 default_repeat = 3 default_timer = time.perf_counter # Don't change the indentation of the template; the reindent() calls # in Timer.__init__() depend on setup being indented 4 spaces and stmt # being indented 8 spaces. template = """ def inner(_it, _timer): {setup} _t0 = _timer() for _i in _it: {stmt} _t1 = _timer() return _t1 - _t0 """ def reindent(src, indent): """Helper to reindent a multi-line statement.""" return src.replace("\n", "\n" + " "*indent) def _template_func(setup, func): """Create a timer function. Used if the "statement" is a callable.""" def inner(_it, _timer, _func=func): setup() _t0 = _timer() for _i in _it: _func() _t1 = _timer() return _t1 - _t0 return inner class Timer: """Class for timing execution speed of small code snippets. The constructor takes a statement to be timed, an additional statement used for setup, and a timer function. Both statements default to 'pass'; the timer function is platform-dependent (see module doc string). To measure the execution time of the first statement, use the timeit() method. The repeat() method is a convenience to call timeit() multiple times and return a list of results. The statements may contain newlines, as long as they don't contain multi-line string literals. """ def __init__(self, stmt="pass", setup="pass", timer=default_timer): """Constructor. See class doc string.""" self.timer = timer ns = {} if isinstance(stmt, str): stmt = reindent(stmt, 8) if isinstance(setup, str): setup = reindent(setup, 4) src = template.format(stmt=stmt, setup=setup) elif callable(setup): src = template.format(stmt=stmt, setup='_setup()') ns['_setup'] = setup else: raise ValueError("setup is neither a string nor callable") self.src = src # Save for traceback display code = compile(src, dummy_src_name, "exec") exec(code, globals(), ns) self.inner = ns["inner"] elif callable(stmt): self.src = None if isinstance(setup, str): _setup = setup def setup(): exec(_setup, globals(), ns) elif not callable(setup): raise ValueError("setup is neither a string nor callable") self.inner = _template_func(setup, stmt) else: raise ValueError("stmt is neither a string nor callable") def print_exc(self, file=None): """Helper to print a traceback from the timed code. Typical use: t = Timer(...) # outside the try/except try: t.timeit(...) # or t.repeat(...) except: t.print_exc() The advantage over the standard traceback is that source lines in the compiled template will be displayed. The optional file argument directs where the traceback is sent; it defaults to sys.stderr. """ import linecache, traceback if self.src is not None: linecache.cache[dummy_src_name] = (len(self.src), None, self.src.split("\n"), dummy_src_name) # else the source is already stored somewhere else traceback.print_exc(file=file) def timeit(self, number=default_number): """Time 'number' executions of the main statement. To be precise, this executes the setup statement once, and then returns the time it takes to execute the main statement a number of times, as a float measured in seconds. The argument is the number of times through the loop, defaulting to one million. The main statement, the setup statement and the timer function to be used are passed to the constructor. """ it = itertools.repeat(None, number) gcold = gc.isenabled() gc.disable() try: timing = self.inner(it, self.timer) finally: if gcold: gc.enable() return timing def repeat(self, repeat=default_repeat, number=default_number): """Call timeit() a few times. This is a convenience function that calls the timeit() repeatedly, returning a list of results. The first argument specifies how many times to call timeit(), defaulting to 3; the second argument specifies the timer argument, defaulting to one million. Note: it's tempting to calculate mean and standard deviation from the result vector and report these. However, this is not very useful. In a typical case, the lowest value gives a lower bound for how fast your machine can run the given code snippet; higher values in the result vector are typically not caused by variability in Python's speed, but by other processes interfering with your timing accuracy. So the min() of the result is probably the only number you should be interested in. After that, you should look at the entire vector and apply common sense rather than statistics. """ r = [] for i in range(repeat): t = self.timeit(number) r.append(t) return r def timeit(stmt="pass", setup="pass", timer=default_timer, number=default_number): """Convenience function to create Timer object and call timeit method.""" return Timer(stmt, setup, timer).timeit(number) def repeat(stmt="pass", setup="pass", timer=default_timer, repeat=default_repeat, number=default_number): """Convenience function to create Timer object and call repeat method.""" return Timer(stmt, setup, timer).repeat(repeat, number) def main(args=None, *, _wrap_timer=None): """Main program, used when run as a script. The optional 'args' argument specifies the command line to be parsed, defaulting to sys.argv[1:]. The return value is an exit code to be passed to sys.exit(); it may be None to indicate success. When an exception happens during timing, a traceback is printed to stderr and the return value is 1. Exceptions at other times (including the template compilation) are not caught. '_wrap_timer' is an internal interface used for unit testing. If it is not None, it must be a callable that accepts a timer function and returns another timer function (used for unit testing). """ if args is None: args = sys.argv[1:] import getopt try: opts, args = getopt.getopt(args, "n:s:r:tcpvh", ["number=", "setup=", "repeat=", "time", "clock", "process", "verbose", "help"]) except getopt.error as err: print(err) print("use -h/--help for command line help") return 2 timer = default_timer stmt = "\n".join(args) or "pass" number = 0 # auto-determine setup = [] repeat = default_repeat verbose = 0 precision = 3 for o, a in opts: if o in ("-n", "--number"): number = int(a) if o in ("-s", "--setup"): setup.append(a) if o in ("-r", "--repeat"): repeat = int(a) if repeat <= 0: repeat = 1 if o in ("-t", "--time"): timer = time.time if o in ("-c", "--clock"): timer = time.clock if o in ("-p", "--process"): timer = time.process_time if o in ("-v", "--verbose"): if verbose: precision += 1 verbose += 1 if o in ("-h", "--help"): print(__doc__, end=' ') return 0 setup = "\n".join(setup) or "pass" # Include the current directory, so that local imports work (sys.path # contains the directory of this script, rather than the current # directory) import os sys.path.insert(0, os.curdir) if _wrap_timer is not None: timer = _wrap_timer(timer) t = Timer(stmt, setup, timer) if number == 0: # determine number so that 0.2 <= total time < 2.0 for i in range(1, 10): number = 10**i try: x = t.timeit(number) except: t.print_exc() return 1 if verbose: print("%d loops -> %.*g secs" % (number, precision, x)) if x >= 0.2: break try: r = t.repeat(repeat, number) except: t.print_exc() return 1 best = min(r) if verbose: print("raw times:", " ".join(["%.*g" % (precision, x) for x in r])) print("%d loops," % number, end=' ') usec = best * 1e6 / number if usec < 1000: print("best of %d: %.*g usec per loop" % (repeat, precision, usec)) else: msec = usec / 1000 if msec < 1000: print("best of %d: %.*g msec per loop" % (repeat, precision, msec)) else: sec = msec / 1000 print("best of %d: %.*g sec per loop" % (repeat, precision, sec)) return None if __name__ == "__main__": sys.exit(main()) ``` 多次尝试无果,把源码翻出来再看,结果然并卵以我2毛实力并未查出个所以然。 还请大神指点。
安卓开发中,我在Spinner的onItemSelected函数里访问全局变量程序就会CrashHandler闪退
小白在做一个android音乐播放器,想设置一个下拉列表来选择歌曲的播放顺序,分随机播放、按时间顺序播放和按热度播放,但是我在使用Spinner的onItemSelected函数时,在里面调用一下全局的歌曲List就会出现CrashHandler然后闪退,而且不用排序只是想打印一下list信息就会闪退,CrashHandler后面的参数不懂是什么东西,希望大佬们指点一下,下面附上代码和报错信息: ``` public void setSpinner(){ List<String> list = new ArrayList<String>(); list.add("随机播放"); list.add("播放最新"); list.add("播放最热"); adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, list); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){ public void onItemSelected(AdapterView<?> arg0, final View arg1, final int arg2, long arg3) { // TODO Auto-generated method stub arg0.setVisibility(View.VISIBLE); Log.i("adapter","您选择的是:"+adapter.getItem(arg2)); //以按热度排序为例 Collections.sort(musicList, new Comparator<Music>() { @Override public int compare(Music o1, Music o2){ int diff = o1.getFansnum() - o2.getFansnum(); if(diff >0) { return 1; }else if(diff < 0){ return -1; } return 0; } }); for(int i=0;i<musicList.size();i++){ Log.i("smile", "排序成功~"+musicList.get(i).getObjectId()+"lizi:"+musicList.get(i).getName()); } } public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub arg0.setVisibility(View.VISIBLE); } }); } ``` 其中musicList是一个全局变量,我用传参传进函数也不行,难道是因为我的歌曲正在播放? 报错信息: D/AndroidRuntime: Shutting down VM D/CrashHandler: BOARD : unknown BOOTLOADER : unknown BRAND : google CPU_ABI : x86 CPU_ABI2 : DEVICE : generic_x86 DISPLAY : sdk_google_phone_x86-userdebug 7.0 NYC 4662066 dev-keys FINGERPRINT : google/sdk_google_phone_x86/generic_x86:7.0/NYC/4662066:userdebug/dev-keys HARDWARE : ranchu D/CrashHandler: HOST : abfarm646 ID : NYC IS_DEBUGGABLE : true IS_EMULATOR : true MANUFACTURER : Google MODEL : Android SDK built for x86 PERMISSIONS_REVIEW_REQUIRED : false PRODUCT : sdk_google_phone_x86 RADIO : unknown SERIAL : unknown SUPPORTED_32_BIT_ABIS : [Ljava.lang.String;@970f945 SUPPORTED_64_BIT_ABIS : [Ljava.lang.String;@16b589a SUPPORTED_ABIS : [Ljava.lang.String;@cfd5cb TAG : Build TAGS : dev-keys TIME : 1521319005000 TYPE : userdebug UNKNOWN : unknown USER : android-build
C语言选择排序法和冒泡法区别问题
编程实现将给定的一组整数采用选择排序法按由小到大的顺序排序。要求: 1) 编写函数create()根据已知整数数组构造一个单链表,假设结点只有一个整数数据域。 2) 编写函数sort()采用选择排序方法对已知链表进行排序。 3) 在主函数中完成数据的输入与结果的输出。 ===我自己写了一个程序,但是不确定选择排序法是什么,求大侠帮忙看下我写的代码sort()是选择排序吗?感觉自己混淆了选择排序法和冒泡排序了,求教如何区别? #include <stdio.h> #include <stdlib.h> typedef struct list { int data; struct list *next; } SLIST; SLIST *creat(int *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i<8; i++) { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; p->next=q; p=q; } p->next=0; return h; } void sort(SLIST *h) { SLIST *p, *q; int t; p = h ; while (p) { q = p->next ; while (q) { if (p->data> q->data) { t = p->data; p->data = q->data; q->data = t; } q = q->next; } p = p->next; } } main() { SLIST *head,*p; int a[8]={11,10,25,18,29,22,15,19}; head=creat(a); printf("\nThe list before sorting:\n"); p=head->next; if (p==NULL) printf("\nThe list is NULL!\n"); else { printf("\nHead"); do { printf("->%d",p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } sort(head); printf("\nThe list after sorting:\n"); p=head->next; if (p==NULL) printf("\nThe list is NULL!\n"); else { printf("\nHead"); do { printf("->%d",p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } } /* 1.程序运行结果为: The list before sorting: Head->11->10->25->18->29->22->15->19->End The list after sorting: Head->10->11->15->18->19->22->25->29->End */
链表排序出了问题,求大佬帮忙看看
输出时会中断,注释掉之后没有输出了;最后找到应该是链表排序的问题,但没找到哪里错了,求大佬解惑 ``` #include<stdio.h> #include<string.h> #include<stdlib.h> /*定义单向链表类型StuLink,链表结点包含xh、xm、cj、dj、mc、nxet六个数据项 分别代表学生的学号、姓名、成绩、等级、名次和指向下一个结点的指针, 其中:学号、姓名、成绩是输入项,等级、名次是计算项*/ struct StuLink*Creat_Link(); //创建链表 struct StuLink*Rank_Link(struct StuLink*list); //计算名次 void display(struct StuLink *p); //输出一个节电的内容 struct StuLink*Sort_Link(struct StuLink *list,int n);//链表排序 struct StuLink*Output_Link(struct StuLink*list,int n);//链表按顺序输出 void menu1(); void menu2(); int main() { struct StuLink*list; menu1(); list=Creat_Link (); //display(list);Output_Link(list,0); Rank_Link(list); //Output_Link(list,1); display(list);Output_Link(list,0); printf("嘤嘤嘤"); return 0; } struct StuLink { int xh; char xm[20]; int cj; char dj; int mc; struct StuLink*next; }; /* Creat_Link函数(10分):建立一个StuLink类型的学生链表,返回链表头指针 每个链表结点代表一个学生信息,要求输入学号、姓名和成绩 其中:学号从1开始按递增1自动生成,成绩必须在[0,100]区间的整数,当输入成绩为-1时,表示输入结束*/ struct StuLink*Creat_Link() { struct StuLink*list=0,*p1=0,*p2;int i=0; int score;char name[20]; //list->xh =0;p2=list; printf("\n输入成绩为-1,结束输入!\n"); printf("请输入学生姓名"); scanf("%s",name); printf("请输入学生成绩"); scanf("%d",&score ); while(score!=-1) { if(score<0||score>100) { printf("输入成绩格式错误,请重新输入正确的学生成绩\n"); scanf("%d",&score ); continue ; } if( (p1=(struct StuLink*)malloc(sizeof(struct StuLink))) ==0) { printf("动态内存空间分配失败\n"); exit(0); } else { switch(score/10) { case 9:p1->dj='A';break; //计算等级 case 8:p1->dj='B';break; case 7:p1->dj='C';break; case 6:p1->dj='D';break; default:p1->dj='E'; } i++; p1->xh =i; p1->cj =score; strcpy(p1->xm,name); if(list==0) list=p1; else p2->next=p1; p2=p1; printf("请输入学生姓名 "); scanf("%s",name); printf("请输入学生成绩 "); scanf("%d",&score); } } return list; } /*设计Rank_Link函数(10分):计算学生链表中每个学生的名次 名次规则:按成绩降序排名,从第1名开始依次排名,若出现并列名次,则名次需要叠加 例如,若出现5个并列第1名,则没有第2名,下一个名次是第6名,依此类推。*/ struct StuLink *Rank_Link(struct StuLink*list) { struct StuLink *p1,*p2; p1=list;p2=list;; while(p1) { while(p2) { p1->mc=1; if(p1->cj<p2->cj) //算法:每一个节点的成绩都依次和list开始所有节点比较一遍 (p1->mc)++; //若有一个节点成绩更高,则名次变大1,成绩相同则不变; p2=p1->next; } p1=p1->next; } return list; } /*设计Sort_Link函数(10分):按指定数据项的顺序【学号(升序),或者,成绩(降序)】对学生链表进行排序*/ struct StuLink*Sort_Link(struct StuLink *list,int n) { if(n=0) //若链表排序后改变了原学号排序方式和list,则其他函数诸多不变 {} //故此处可新建一个链表,按名次进行排序;返回新链表地址 (*****未完成*******) //此处为判定排序方式; } /*设计Output_Link函数(10分):按指定数据项的顺序【学号(升序),或者,成绩(降序)】输出学生成绩表、各等级人数。 学生成绩表每行输出一个学生信息(依次为学号、姓名、成绩、等级和名次,各项间以1个空格隔开),各等级人数分行输出*/ void display(struct StuLink *p) { printf("学号 %d",p->xh); printf("姓名 %s",p->xm); printf("成绩 %d",p->cj); printf("等级 %c",p->dj); if(p->mc>1) printf("名次 %d\n",p->mc); else printf("kong"); if(p->mc) printf("名次 %d\n",p->mc); else printf("kong"); } struct StuLink*Output_Link(struct StuLink *list,int n) { struct StuLink *Rank_Link(list); int i=1,j=0;struct StuLink*p=NULL;p=list; if(n==1) //如果按成绩名次输出 { for(i=1;;i++) { if(p) { if(p->mc ==i) { j++; display(p); } p=p->next; } //算法:由i循环控制,从头结点到尾先找到第i名并输出;(ok) else if(j) continue; //若上面判定是while(p),则p为空小循环停止后是否跳出第i词for循环进行下一次; else break; //遍历链表后若无对应名次则所有名次学生均已输出,跳出i的for循环 } } else { while(p) { display(p); p=p->next; } } return list; } void menu1 () { printf("===============================================\n"); printf("|| 1--创建链表 2--链表维护 ||\n"); printf("|| 3--计算排序 4--统计分析 ||\n"); printf("|| 5--报表输出 0--退出 ||\n"); printf("===============================================\n"); printf(" 请输入菜单编号(0,1-5): "); } ```
链表排序(for读取指针问题)出错,求大佬解惑
链表的排序函数,和我上一个提问都是使用了这种for循环读取指针然后对指针的值进行操作,都导致被操作的指针发生了越界错误,``` struct StuLink*Sort_Link(struct StuLink *list) { struct StuLink *p1,*p2,*p3=NULL; for(p1=list;p1->next!=NULL;p1=p1->next) for(p2=p1->next;p2!=NULL;p2=p2->next) { if(p1->cj<p2->cj) { p3->cj=p1->cj; p3->xh=p1->xh; p3->dj=p1->dj; strcpy(p3->xm,p1->xm); p1->cj=p2->cj; p1->xh=p2->xh; p1->dj=p2->dj; strcpy(p1->xm,p2->xm); p2->cj=p3->cj; p2->xh=p3->xh; p2->dj=p3->dj; strcpy(p2->xm,p3->xm); } } Output_Link(list); return list; } ``` 贴上一次的while循环代码 ``` //struct StuLink*Rank_Link(struct StuLink*list) //{ // struct StuLink *p1,*p2; // p1=list; // for(;p1!=NULL ;p1=p1->next) // for(p2=list;p2!=NULL;p2=p2->next) // { // if(p1->xh==p2->xh) // continue; // if(p1->cj<p2->cj) // p1->mc++; // } // return list; //} ```
C++小程序,调试。。。。。。
编写程序,输入若干个字符串。要求:(1)按字符串长度的大小升序输出各个字符串。(2)按字符串中字符的ASCLL码值大小升序输出各个字符串。为什么我输不出结果来???我该如何改呢?#include <string> #include <iostream> #include <algorithm> #include <vector> using namespace std; //比较函数,用于排序 bool compare(string a, string b) { //长度不一样的时候采用长度来排序 if (a.length() != b.length()) { return a.length() < b.length(); } //长度一样的时候采用ASCLL值排序 return a < b; } int main() {vector<string>list; string inputString; while (cin >> inputString) { //结束标志,测试方便,可以注释掉 if (inputString == "0") { break; } //加入到vector list.push_back(inputString); } //排序,系统方法 sort(list.begin(), list.end(), compare); //依次输出 for (unsigned int i = 0; i<list.size(); i++) { cout << list[i] << endl; } return 0; }
总是出现 undeclared identifier,但是我已经定义了
#include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<time.h> #include<string.h> int Student=0;//总人数 int N; int Mark[100]; int Mark1[100]; struct student *Head; struct student { char Name[20]; char Snum[20]; char Sex[4]; }; typedef struct node { char name[20]; char snum[20]; char sex[4]; struct node *pnext; }node,*pnode;//类型声明 struct student *GetData();//文件导入 pnode create_list();//创建链表 void traverse_list(pnode phead);//遍历链表输入 int length_list(pnode phead);//链表长度 void sort_list(pnode phead);//学号正排序 void inverse_list(pnode phead);//学号反排序 void delete_list(pnode phead);//链表删除 int insert_list(pnode phead);//链表插入 void main() { srand(time(NULL));//随机函数初始化 pnode head=NULL;//建空链表 head=create_list();//链表头指针地址返回head printf("\n"); traverse_list(head);//原链表正排序 sort_list(head); printf("1.按照学号大小正排序后:\n"); traverse_list(head); int pos; pos=rand()%N+1;////随即删除 delecte_list(head,pos); printf("2.系统随机删除的同学第%d个同学\n\n删除后按学号反序输出",pos);/// inverse_list(head);//反排序 traverse_list(head); printf("3.系统已从剩余学生中抽取了一位\n\n"); printf("插入该生序号为%d\n\n",insert_list(head)); traverse_list(head);//遍历重新反排序链表输出 }
java 新手,求检查改正代码
题目要求: 文件夹中给出的源程序Main.java,StuList.java,Student.java,填补其中的空缺内容。 要求: (1)StuList.java和Student.java在同一个包中。 (2)Main.java在无名包中。 其中,Main.java中的类使用到StuList.java和Student.java中的成员变量或者成员方法。 本实验中的源程序可以完成如下任务: 创建学生链表,从键盘上输入学生信息加入学生链表,添加学生信息,删除学生信息,显示学生信息,按照学生成绩排序等。 我写的代码: Main: import pzw.*; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); StuList list=new StuList(20); //学生链表可以容纳20个学生 System.out.println("要输入多少个学生的信息?"); int num=in.nextInt(); for(int i=0;i<num;i++) { System.out.println("请输入第"+(i+1)+"位学生的学号,姓名,数学、计算机成绩"); Student t=new Student(in.nextInt(),in.next(),in.nextDouble(),in.nextDouble()); list.addStu(t); } list.print(); list.addStu(new Student(1321,"liu",90,60)); list.addStu(new Student(1331,"guo",96,80)); list.addStu(new Student(1326,"niu",80,90)); list.removeStu(3); list.print(); System.out.println("按数学成绩排序:"); list.sort(1); list.print(); System.out.println("按计算机成绩排序:"); list.sort(2); list.print(); in.close(); } } StuList类: package pzw; public class StuList { public Student []stu=new Student[30]; int i=0,j=0,k=0,l=0,m=0,t=0; boolean yichu,kong; public StuList(int a) { j=a; } private boolean isOverflow() //辅助方法,判断数组是否溢出 { if(j<30) { yichu=false; } else { yichu=true; } return yichu; } public boolean isEmpty() //判断数组是否为空 { if(stu==null) { kong=true; } else{ kong=false; } return kong; } public boolean addStu(Student x) //添加学生信息 { if(isOverflow()) return false; else { stu[k]=x; k++; return true; } } public Student removeStu(int index) //删除指定位置的学生信息 { int p; if(isEmpty()) { System.out.println("学生表空的~~~删除失败~~~~"); return null; } Student temp=stu[index-1]; for(p=index;p<j;p++) { stu[p]=stu[p+1]; } return temp; } public void sort(int x) //按照成绩排序,参数1按数学排序,参数2按计算机排序 { if(x==1) { for(i=0;i<j-1;i++) { for(m=0;m<j-1;m++) { if(stu[m].sx<stu[m+1].sx) { Student a; a=stu[m]; stu[m]=stu[m+1]; stu[m+1]=a; } } } } else if(x==2) { for(i=0;i<j-1;i++) { for(m=0;m<j-1;m++) { if(stu[m].jsj<stu[m+1].jsj) { Student a; a=stu[m]; stu[m]=stu[m+1]; stu[m+1]=a; } } } } } public void print() { for(l=0;l<j;l++) { System.out.println(stu[l].xh+ stu[l].xm+ stu[l].sx+ stu[l].jsj); } } } Student: package pzw; public class Student { int xh=0; String xm=null; double sx=0; double jsj=0; public Student(int a,String b,double c,double d) { xh=a; xm=b; sx=c; jsj=d; } public int getxh() { return xh; } public String getxm() { return xm; } public double getsx() { return sx; } public double getjsj() { return jsj; } } 附题目给出的程序: Student.java: 【包的声明】 public class Student { 【成员变量的声明】 【构造方法】 【获取学号】 【设置学号】 【获取姓名】 【设置姓名】 【获取数学成绩】 【设置数学成绩】 【获取计算机成绩】 【设置计算机成绩】 【输出学生信息】 } StuList.java: 【包的声明】 public class StuList { 【学生信息声明】 private int length; //实际容量 【构造方法】 private boolean isOverflow() //辅助方法,判断数组是否溢出 { 【代码】 } public boolean isEmpty() //判断数组是否为空 { 【代码】 } public boolean addStu(Student x) //添加学生信息 { if(isOverflow()) return false; 【代码】 return true; } public Student removeStu(int index) //删除指定位置的学生信息 { if(isEmpty()) { System.out.println("学生表空的~~~删除失败~~~~"); return null; } Student temp=stu[index-1]; 【代码】 return temp; } public void sort(int x) //按照成绩排序,参数1按数学排序,参数2按计算机排序 { if(x==1) { 【代码】 } else if(x==2) { 【代码】 } } public void print() { 【代码】 } } 主函数: 【包的引用】 public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); StuList list=new StuList(20); //学生链表可以容纳20个学生 System.out.println("要输入多少个学生的信息?"); int num=in.nextInt(); for(int i=0;i<num;i++) { System.out.println("请输入第"+(i+1)+"位学生的学号,姓名,数学、计算机成绩"); Student t=new Student(in.nextInt(),in.next(),in.nextDouble(),in.nextDouble()); list.addStu(t); } list.print(); list.addStu(new Student(1321,"liu",90,60)); list.addStu(new Student(1331,"guo",96,80)); list.addStu(new Student(1326,"niu",80,90)); list.removeStu(3); list.print(); System.out.println("按数学成绩排序:"); list.sort(1); list.print(); System.out.println("按计算机成绩排序:"); list.sort(2); list.print(); in.close(); } }
python运行有错误:这是对数据进行分析生成可视化界面的程序(我是小白,请说下解决方法)
运行错误: C:\Users\Administrator\PycharmProjects\untitled\venv\Scripts\python.exe C:/Users/Administrator/PycharmProjects/untitled/dianying/src/analysis_data.py 一共有:16590个 Building prefix dict from the default dictionary ... Loading model from cache C:\Users\ADMINI~1\AppData\Local\Temp\jieba.cache Loading model cost 0.808 seconds. Prefix dict has been built succesfully. Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/untitled/dianying/src/analysis_data.py", line 252, in <module> jiebaclearText(content) File "C:/Users/Administrator/PycharmProjects/untitled/dianying/src/analysis_data.py", line 97, in jiebaclearText f_stop_text = f_stop.read() File "D:\python111\lib\codecs.py", line 321, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa1 in position 3: invalid start byte Process finished with exit code 1 代码如下: ''' data : 2019.3.28 goal : 可视化分析获取到的数据 ''' import csv time = [] nickName = [] gender = [] cityName = [] userLevel = [] score = [] content = '' # 读数据 def read_csv(): content = '' # 读取文件内容 with open(r'D:\maoyan.csv', 'r', encoding='utf_8_sig', newline='') as file_test: # 读文件 reader = csv.reader(file_test) i = 0 for row in reader: if i != 0: time.append(row[0]) nickName.append(row[1]) gender.append(row[2]) cityName.append(row[3]) userLevel.append(row[4]) score.append(row[5]) content = content + row[6] # print(row) i = i + 1 print('一共有:' + str(i - 1) + '个') return content import re, jieba # 词云生成工具 from wordcloud import WordCloud, ImageColorGenerator # 需要对中文进行处理 import matplotlib.font_manager as fm from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] from os import path d = path.dirname(__file__) stopwords_path = 'D:\ku\chineseStopWords.txt' # 评论词云分析 def word_cloud(content): import jieba, re, numpy from pyecharts import WordCloud import pandas as pd # 去除所有评论里多余的字符 content = content.replace(" ", ",") content = content.replace(" ", "、") content = re.sub('[,,。. \r\n]', '', content) segment = jieba.lcut(content) words_df = pd.DataFrame({'segment': segment}) # quoting=3 表示stopwords.txt里的内容全部不引用 stopwords = pd.read_csv(stopwords_path, index_col=False, quoting=3, sep="\t", names=['stopword'], encoding='utf-8') words_df = words_df[~words_df.segment.isin(stopwords.stopword)] words_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数": numpy.size}) words_stat = words_stat.reset_index().sort_values(by=["计数"], ascending=False) test = words_stat.head(500).values codes = [test[i][0] for i in range(0, len(test))] counts = [test[i][1] for i in range(0, len(test))] wordcloud = WordCloud(width=1300, height=620) wordcloud.add("影评词云", codes, counts, word_size_range=[20, 100]) wordcloud.render(d + "\picture\c_wordcloud.html") # 定义个函数式用于分词 def jiebaclearText(text): # 定义一个空的列表,将去除的停用词的分词保存 mywordList = [] text = re.sub('[,,。. \r\n]', '', text) # 进行分词 seg_list = jieba.cut(text, cut_all=False) # 将一个generator的内容用/连接 listStr = '/'.join(seg_list) listStr = listStr.replace("class", "") listStr = listStr.replace("span", "") listStr = listStr.replace("悲伤逆流成河", "") # 打开停用词表 f_stop = open(stopwords_path, encoding="utf8") # 读取 try: f_stop_text = f_stop.read() finally: f_stop.close() # 关闭资源 # 将停用词格式化,用\n分开,返回一个列表 f_stop_seg_list = f_stop_text.split("\n") # 对默认模式分词的进行遍历,去除停用词 for myword in listStr.split('/'): # 去除停用词 if not (myword.split()) in f_stop_seg_list and len(myword.strip()) > 1: mywordList.append(myword) return ' '.join(mywordList) # 生成词云图 def make_wordcloud(text1): text1 = text1.replace("悲伤逆流成河", "") bg = plt.imread(d + "/static/znn1.jpg") # 生成 wc = WordCloud( # FFFAE3 background_color="white", # 设置背景为白色,默认为黑色 width=890, # 设置图片的宽度 height=600, # 设置图片的高度 mask=bg, # margin=10, # 设置图片的边缘 max_font_size=150, # 显示的最大的字体大小 random_state=50, # 为每个单词返回一个PIL颜色 font_path=d + '/static/simkai.ttf' # 中文处理,用系统自带的字体 ).generate_from_text(text1) # 为图片设置字体 my_font = fm.FontProperties(fname=d + '/static/simkai.ttf') # 图片背景 bg_color = ImageColorGenerator(bg) # 开始画图 plt.imshow(wc.recolor(color_func=bg_color)) # 为云图去掉坐标轴 plt.axis("off") # 画云图,显示 # 保存云图 wc.to_file(d + r"/picture/word_cloud.png") # 评论者性别分布可视化 def sex_distribution(gender): # print(gender) from pyecharts import Pie list_num = [] list_num.append(gender.count('0')) # 未知 list_num.append(gender.count('1')) # 男 list_num.append(gender.count('2')) # 女 attr = ["其他", "男", "女"] pie = Pie("性别饼图") pie.add("", attr, list_num, is_label_show=True) pie.render(d + r"\picture\sex_pie.html") # 评论者所在城市分布可视化 def city_distribution(cityName): city_list = list(set(cityName)) city_dict = {city_list[i]: 0 for i in range(len(city_list))} for i in range(len(city_list)): city_dict[city_list[i]] = cityName.count(city_list[i]) # 根据数量(字典的键值)排序 sort_dict = sorted(city_dict.items(), key=lambda d: d[1], reverse=True) city_name = [] city_num = [] for i in range(len(sort_dict)): city_name.append(sort_dict[i][0]) city_num.append(sort_dict[i][1]) import random from pyecharts import Bar bar = Bar("评论者城市分布") bar.add("", city_name, city_num, is_label_show=True, is_datazoom_show=True) bar.render(d + r"\picture\city_bar.html") # 每日评论总数可视化分析 def time_num_visualization(time): from pyecharts import Line time_list = list(set(time)) time_dict = {time_list[i]: 0 for i in range(len(time_list))} time_num = [] for i in range(len(time_list)): time_dict[time_list[i]] = time.count(time_list[i]) # 根据数量(字典的键值)排序 sort_dict = sorted(time_dict.items(), key=lambda d: d[0], reverse=False) time_name = [] time_num = [] print(sort_dict) for i in range(len(sort_dict)): time_name.append(sort_dict[i][0]) time_num.append(sort_dict[i][1]) line = Line("评论数量日期折线图") line.add( "日期-评论数", time_name, time_num, is_fill=True, area_color="#000", area_opacity=0.3, is_smooth=True, ) line.render(d + r"\picture\c_num_line.html") # 评论者猫眼等级、评分可视化 def level_score_visualization(userLevel, score): from pyecharts import Pie userLevel_list = list(set(userLevel)) userLevel_num = [] for i in range(len(userLevel_list)): userLevel_num.append(userLevel.count(userLevel_list[i])) score_list = list(set(score)) score_num = [] for i in range(len(score_list)): score_num.append(score.count(score_list[i])) pie01 = Pie("等级环状饼图", title_pos='center', width=900) pie01.add( "等级", userLevel_list, userLevel_num, radius=[40, 75], label_text_color=None, is_label_show=True, legend_orient="vertical", legend_pos="left", ) pie01.render(d + r"\picture\level_pie.html") pie02 = Pie("评分玫瑰饼图", title_pos='center', width=900) pie02.add( "评分", score_list, score_num, center=[50, 50], is_random=True, radius=[30, 75], rosetype="area", is_legend_show=False, is_label_show=True, ) pie02.render(d + r"\picture\score_pie.html") time = [] nickName = [] gender = [] cityName = [] userLevel = [] score = [] content = '' content = read_csv() # 1 词云 jiebaclearText(content) make_wordcloud(content) # pyecharts词云 # word_cloud(content) # 2 性别分布 sex_distribution(gender) # 3 城市分布 city_distribution(cityName) # 4 评论数 time_num_visualization(time) # 5 等级,评分 level_score_visualization(userLevel, score)
单链表排序,不知道怎么改,求大神指导下
做了个职工管理系统,卡在排序那儿了,交换地址频频出错,只能改成交换数据域。。然而还是错的,求大神帮忙看看,谢谢!!! 头文件: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> typedef struct worker{ char worker_number[10]; char worker_name[10]; char worker_sex[3]; char adm_number[5]; char position[10]; char major[20]; int salary; char tel_number[20]; struct worker *next; }worker; #define null 0 int menu_select(); worker *input(); void display(struct worker *); worker *add(struct worker *); void account(struct worker *); void total(struct worker *); worker *delete_worker(worker *); void bubble_sort(struct worker *); void search(struct worker *); 排序函数: #include "1.h" void bubble_sort(struct worker *list) { int i,j,len=0; worker *p1,*p2,*p3,*p4; p2=(struct worker *)malloc(sizeof(worker)); p3=(struct worker *)malloc(sizeof(worker)); p4=(struct worker *)malloc(sizeof(worker)); p1=list->next; p2=list->next; p3=list->next->next; p4=NULL; while(p1) { p1=p1->next; len++; } printf("有%d条记录!\n",len); switch(len) { case 0: printf("该表中无任何职工记录!\n"); break; case 1: printf("该表中只有1条记录!\n"); display(list); break; default : for(i=0;i<len;i++) { for(j=0;j<len-1;j++) { if( p2->salary < p3->salary ) { strcpy(p4->worker_number,p2->worker_number); strcpy(p4->worker_name,p2->worker_name); strcpy(p4->worker_sex,p2->worker_sex); strcpy(p4->tel_number,p2->tel_number); p4->salary=p2->salary; strcpy(p4->position,p2->position); strcpy(p4->major,p2->major); strcpy(p4->adm_number,p2->adm_number); strcpy(p2->worker_number,p3->worker_number); strcpy(p2->worker_name,p3->worker_name); strcpy(p2->worker_sex,p3->worker_sex); strcpy(p2->tel_number,p3->tel_number); p2->salary=p3->salary; strcpy(p2->position,p3->position); strcpy(p2->major,p3->major); strcpy(p2->adm_number,p3->adm_number); strcpy(p3->worker_number,p4->worker_number); strcpy(p3->worker_name,p4->worker_name); strcpy(p3->worker_sex,p4->worker_sex); strcpy(p3->tel_number,p4->tel_number); p3->salary=p4->salary; strcpy(p3->position,p4->position); strcpy(p3->major,p4->major); strcpy(p3->adm_number,p4->adm_number); } p3=p3->next; } p2=p2->next; } printf("比较结束!\n"); display(list); break; } }
[JAVA]两个数组取相同元素,能有单层循环的实现么?
m个元素和n个元素的两个数组(具体没要求,假定没排序,有重复),取其中的相同元素 最近看到个面试题,答案说可以用m+n次循环实现,求算法,最好用java实现。 [b]问题补充:[/b] 大部分java库函数实现都用了循环,包括List.contains,Map.containsKey,Map.get等等 排序性能也不高,还是没看到什么好的做法,:( m+n的说法是我书上看到的,看来这年头书也不可靠了 [b]问题补充:[/b] ============================= To RyanPoy: 谢谢回复先 :) 排序性能怎样,我暂时没测试。 想问下,map的实现没有循环么?Map.Entry.next这样做迭代不是循环么 还有,好多地方提到这题的哈希实现的时候都会说是用空间换时间,但是java里具体怎么实现所谓空间换时间的? 附HashMap的containsKey和get都用到的: for (Entry<K,V> e = table[indexFor(hash, table.length)]; e != null; e = e.next) { [b]问题补充:[/b] =============================== 自己测试了一下 首先,hash查找确实快,但是对于这题的情况来说,把array put到hash中要花很长时间,普遍情况下,最快的实现还是楼下RyanPoy的先sort在search,再次感谢。 附: m=n=1000时 Put array to hashtable use 4,508,120ns Search with Hashtable use 2,861,880ns, found 1 Search with Sort use 6,227,000ns, found 1 m=n=100000时 Put array to hashtable use 108,423,560ns Search with Hashtable use 30,892,680ns, found 4 Search with Sort use 59,157,680ns, found 4 数组是random生成的
两个指针指向同一个节点,明明对两个指针操作一样却一个正常,一个无法读取内存,急求大佬解惑
求大佬帮忙解惑,万分感谢 出错函数代码如下 ``` struct StuLink*Rank_Link(struct StuLink*list) { struct StuLink *p1,*p2; p1=list;p2=list; for(;p1!=NULL ;p1=p1->next) for(;p2!=NULL;p2=p2->next) { if(p1->xh ==p2->xh ) continue; if(p1->cj<p2->cj) p1->mc++; } return list; } ``` + p1 0x00be9f38 {xh=1 xm=0x00be9f3c "aaa" cj=88 ...} StuLink * + p2 0xcdcdcdcd {xh=??? xm=0xcdcdcdd1 <读取字符串的字符时出错。> cj=??? ...} StuLink * /*设计Rank_Link函数(10分):计算学生链表中每个学生的名次 名次规则:按成绩降序排名,从第1名开始依次排名,若出现并列名次,则名次需要叠加 例如,若出现5个并列第1名,则没有第2名,下一个名次是第6名,依此类推。*/ 完整简化程序如下 ``` #include<stdio.h> #include<string.h> #include<stdlib.h> /*定义单向链表类型StuLink,链表结点包含xh、xm、cj、dj、mc、nxet六个数据项 分别代表学生的学号、姓名、成绩、等级、名次和指向下一个结点的指针, 其中:学号、姓名、成绩是输入项,等级、名次是计算项*/ struct StuLink*Creat_Link(); //创建链表 struct StuLink*Rank_Link(struct StuLink*list); //计算名次 void display(struct StuLink *p); //输出一个结点的内容 struct StuLink*Sort_Link(struct StuLink *list,int n);//链表排序 struct StuLink*Output_Link(struct StuLink*list);//链表按顺序输出 void menu1();//一级菜单 void menu2(); //创建链表 struct StuLink { int xh; char xm[20]; int cj; char dj; int mc; struct StuLink*next; }; int main() { struct StuLink *list; list=Creat_Link(); Rank_Link(list); Output_Link(list); return 0; } struct StuLink*Creat_Link() { struct StuLink*list=0,*p1=0,*p2;int i=0; int score;char name[20]; //list->xh =0;p2=list; printf("\n输入成绩为-1,结束输入!\n"); printf("请输入学生姓名"); scanf("%s",name); printf("请输入学生成绩"); scanf("%d",&score ); while(score!=-1) { if(score<0||score>100) { printf("输入成绩格式错误,请重新输入正确的学生成绩\n"); scanf("%d",&score ); continue ; } if( (p1=(struct StuLink*)malloc(sizeof(struct StuLink))) ==0) { printf("动态内存空间分配失败\n"); exit(0); } else { switch(score/10) { case 9:p1->dj='A';break; //计算等级 case 8:p1->dj='B';break; case 7:p1->dj='C';break; case 6:p1->dj='D';break; default:p1->dj='E'; } i++; p1->xh =i; p1->cj =score; p1->mc=1; strcpy(p1->xm,name); if(list==0) list=p1; else p2->next=p1; p2=p1; printf("请输入学生姓名 "); scanf("%s",name); printf("请输入学生成绩 "); scanf("%d",&score); } } return list; } void display(struct StuLink*p) { printf("学号 %d",p->xh); printf("姓名 %s",p->xm); printf("成绩 %d",p->cj); printf("等级 %c",p->dj); /*if(p->mc>1)*/ printf("名次 %d\n",p->mc); /*else printf("kong\n");*/ /*if(p->mc) printf("名次 %d\n",p->mc); else printf("kong");*/ } struct StuLink*Rank_Link(struct StuLink*list) { struct StuLink *p1,*p2; p1=list;p2=list; for(;p1!=NULL ;p1=p1->next) for(;p2!=NULL;p2=p2->next) { if(p1->xh ==p2->xh ) continue; if(p1->cj<p2->cj) p1->mc++; } return list; } struct StuLink*Output_Link(struct StuLink*list) { struct StuLink *p3=list; for(;p3!=NULL ;p3=p3->next) display(p3); } ```
python3 sorted()函数报错 TypeError: '<' not supported between instances of 'str' and 'int'
想对dict按值的大小进行排序。 我不明白的是,我明明在前面把所有非整形都转成整形了,它还是报类型错误。 ``` dict = {} for word in words: word=word.replace("\n","") body = {"query":{"bool":{"must":[{"range":{"time":{"gt":"2018-01-01","lt":"2019-01-01"}}},{"term":{"detailwords": word}}],"must_not":[],"should":[]}},"from":0,"size":20,"sort":[{"hot":"desc"}],"aggs":{}} res = es.search(index="events_v3", body=body) # print(res['hits']['hits']) for item in res['hits']['hits']: dict[item['_source']['desc']] = item['_source']['hot'] for key, value in dict.items(): if type(value) != type(100): print("a") dict[key] = int(value) list1 = sorted(dict.values()) filename = 'abcd.json' with open(filename, 'w', encoding='UTF-8') as f_obj1: json.dump(dict, f_obj1, ensure_ascii=False) ``` 报的错误是: Traceback (most recent call last): File "G:/pycharm_workspace/ESDemo/demo1.py", line 24, in <module> list1 = sorted(dict.values()) TypeError: '<' not supported between instances of 'str' and 'int'
c语言链表的排序问题,求大神帮助。。
``` #include"hlinklist.h" void sort(linklist head) { linklist t,t2,min,z; t=head->next; printf("OK"); min=t; while(t!=NULL) { while(t->next!=NULL) { if((min->info)>(t->next->info)) { t2=t; min=t; } t=t->next; } t2->next=t2->next->next; min->next=head->next; head->next=min; } } int main() {linklist head; head=creatbyqueue(); print(head); sort(head); print(head); delist(head); return 0; } ``` 估计是sort函数出了问题,还请大神指点一二。。 估计是t2->next=t2->next->next这出了问题但不知如何解决。。 以下为头文件代码以备不时之需: ``` #include<stdio.h> #include<stdlib.h> typedef int datatype; typedef struct link_node{ datatype info; struct link_node *next; }node; typedef node *linklist; linklist creatbystack(){ linklist head,s; datatype x; s=(linklist)malloc(sizeof(node)); head=s; head->next=NULL; printf("请输入若干整数序列:\n"); scanf("%d",&x); while(x!=0) { s=(linklist)malloc(sizeof(node)); s->info=x; s->next=head->next; head->next=s; scanf("%d",&x); } return head; } linklist creatbyqueue() { linklist head,s,r; datatype x; s=(linklist)malloc(sizeof(node)); head=r=s; printf("请输入若干整数序列:\n"); scanf("%d",&x); while(x!=0) { s=(linklist)malloc(sizeof(node)); s->info=x; r->next=s; r=s; scanf("%d",&x); } r->next=NULL; return head; } void print(linklist head) { linklist p; int i=0; p=head->next; printf("List is:\n"); while(p) {printf("%5d",p->info); p=p->next; i++; if(i%10==0) printf("\n"); } printf("\n"); } void delist(linklist head) { linklist p=head; while(p) { head=p->next; free(p); p=head; } } ```
利用c语言,写出顺序列表完成基础功能()
帮忙看看吧 ``` #include <stdio.h> #define MaxSize 100 typedef int ElemType; typedef struct list { ElemType elem[MaxSize]; int last; //定义最后一个数 }list; //定义一个类型 //功能包括:创建,初始化,插入,删除,访问,定位访问,合并,输出 void sort(list *L); void CreList(list*l,int n); //创建 void Initlist (list*L); //初始化 int Inslist(list*L,int i,ElemType e); //插入 int DelList (list*L,int i); //删除 int Locate(list*l,ElemType e); //查找 int CombList (list *L1,list *L2,list *L3); int AccLink (list *L,int i); //顺序访问 void DispList (list *L); //输出顺序表 int main (void) { list L1,L2,L3; int cho,size,temp1,temp2; do { printf("请您创建一个顺序列表\n"); printf("请输入列表的长度(长度需要小于最大长度(MaxSize):"); scanf("%d",&size); printf("输入列表的元素:"); Initlist(&L1); //进行初始化 CreList(&L1,size); }while(size<=0 || size>MaxSize); //检测长度定义的列表是否超过最大值 do { printf("以下为可以进行的操作~\n"); printf("1_访问列表中某一个指定位置的元素\n"); printf("2_查找列表中某一个元素的所在位置\n"); printf("3_在列表中插入一个元素\n"); printf("4_从列表中删除一个元素\n"); printf("5_初始化列表\n"); printf("6_合并第二序列列表\n"); printf("请进行选择:"); scanf("%d",&cho); }while (cho>6 || cho<1); //对非法输入进行对策 switch(cho) { case 1: printf("请输入位置:"); scanf("%d",&temp1); AccLink(&L1,temp1); break; case 2: printf("请输入元素:"); scanf("%d",&temp1); temp1 = Locate(&L1,temp1); printf("该位置的元素是 %d\n",temp1); break; case 3: printf("请您输入要插入元素的位置和元素:"); scanf("%d %d",&temp1,&temp2); Inslist (&L1,temp1,temp2); printf("目前列表为:"); DispList(&L1); puts(""); break; case 4: printf("请输入要删除元素所在的位置:"); scanf("%d",&temp2); temp1 = DelList (&L1,temp2); printf("您删除的元素是%d\n",temp1); printf("目前列表是:"); DispList(&L1); puts(""); break; case 5: Initlist (&L1); break; case 6: puts("请输入列表的长度(小于最大长度 Maxsize)"); scanf("%d",&size); puts("请现在输入元素:"); CreList(&L2,size); puts("确定要合并两个列表吗?(将两个列表按升序排列)"); puts("1)Yes\t2)No"); printf("你的选择是:"); do { scanf("%d",&cho); }while (cho <1 || cho>2); switch (cho) { case 1: CombList(&L1,&L2,&L3); printf("经过组合后的列表为:"); DispList(&L3); break; case 2: DispList(&L1); puts(""); DispList(&L2); return 0; break; } break; default:puts("您输入的有错误!"); return 0; } return 0; } void CreList (list *L,int n) //创建一个n个元素的顺序列表 { int i; for (i=0;i<n;i++) { scanf ("%d",&L->elem[i]); L->last = n-1; } } void InitList (list *L) //初始化顺序表为空表 { L->last = -1; } int InsList (list *L,int i,ElemType e) //此函数用于在顺序表中插入元素 { int k; if (L->last == MaxSize-1) { printf("存储空间已满,无法执行“添加”操作"); return 0; } if (!(i>=1 && i<=L->last+2)) { puts("位置输入不合法"); return 0; } for (k=L->last;k>=i-1;k--) //将“目标位置”后的元素依次后移 { L->elem[k+1] = L->elem[k]; } L->elem[i-1] = e; //将“目标元素”插入到目标位置 L->last++; return 1; } int DelList (list *L,int i) { int k; ElemType temp; if (L->last == -1) { puts("此顺序表为空,无法执行“删除”操作"); return 0; } if (!(i>=1 && i<=L->last+1)) { puts("删除位置不合法"); return 0; } temp = L->elem[i-1]; //将删除的元素保存,便于用户核对 for(k=i-1;k<=L->last;k++) //将被删除元素后的元素依次前移一位 { L->elem[k] = L->elem[k+1]; } L->last--; return temp; } int Locate (list *L,ElemType e) //此函数通过给定元素值来查找其位置 { int i; if (L->last == -1) { puts("此顺序表为空,无法执行“查找”操作"); return 0; } for (i=0;i<L->last;i++) { if (L->elem[i] == e) { return i+1; } } return 0; } int CombList (list *L1,list *L2,list *L3) { int size,i,j,k; if (L1->last + L2->last + 2 >=MaxSize) { puts("合并后的顺序表长度超出单顺序表上限,无法执行“合并”操作"); return 0; } size = L1->last + L2->last + 2; //确定顺序表L3的大小 sort(L1); sort(L2); InitList(L3); //初始化顺序表L3 for (i=0,j=0,k=0;k<size;k++) { if (L1->elem[i] < L2->elem[j]) { InsList (L3,k+1,L1->elem[i++]); //将L1->elem[i]插入L3 if (i>L1->last) //L1全部插入L3后将L2中的剩余元素依次插入L3 { for (;k<size-1;k++) { InsList (L3,k+2,L2->elem[j++]); } } } else { InsList (L3,k+1,L2->elem[j++]); //将L2->elem[j]插入L3 if (j>L2->last) //L2全部插入L3后将L1中的剩余元素依次插入L3 { for (;k<size-1;k++) { InsList (L3,k+2,L1->elem[i++]); } } } } L3->last = k-1; return 1; } int AccLink (list *L,int i) //此函数通过位置来访问顺序表中的元素 { if (i > L->last+1) { puts("输入位置不合法"); return 0; } printf("位置元素 %d 是 %d",i,L->elem[i-1]); return 1; } void DispList (list *L) //此函数用于打印顺序表 { int i; for (i=0;i<=L->last;i++) { printf ("%d ",L->elem[i]); } } void sort(list *L) //此函数使用冒泡法将顺序表从小到大进行排序 { int i,j; ElemType temp; for (i=0;i<=L->last;i++) { for (j=0;j<=L->last-1;j++) { if (L->elem[j] > L->elem[j+1]) { temp = L->elem[j]; L->elem[j] = L->elem[j+1]; L->elem[j+1] = temp; } } } } ``` *告诉我怎么解决 * 问题在哪 * 速度
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
【资源】一个C/C++开发工程师的学习路线(已经无路可退,唯有逆风飞翔)【内附资源页】
声明: 1)该文章整理自网上的大牛和专家无私奉献的资料,具体引用的资料请看参考文献。 2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。 3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。 4)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。大家都共享一点点,一起为祖国科研的推进...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
神级宝库!GitHub 标星 1.2w+,Chrome 最天秀的插件都在这里啦!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个沉迷 Chrome 不能自拔的蒟蒻… 作为一个在远古时代用过什么 IE、360、猎豹等浏览器的资深器哥,当我第一次了解 Chrome 的时候,就被它的美貌给吸引住了… 就在我用了一段时间之后,我坚决的卸载了电脑上其它碍眼的浏览器,并觉得在之前的搬砖生涯中,我不配当哥,我只配是个沙雕… ...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
张朝阳回应迟到 1 分钟罚 500:资本家就得剥削员工
loonggg读完需要2分钟速读仅需 1 分钟大家我,我是你们的校长。前几天,搜狐的董事局主席兼 CEO 张朝阳和搜狐都上热搜了。原因很简单,就是搜狐出了“考勤新规”。一封搜狐对员工发布...
立即提问