c语言程序设计-将文件内容赋到一个链表里 然后写一个增加节点的函数 将新增加的节点连到那个链表后面 10C

***********就是功能1和功能2的实现************
#include
#include
#include
#include

//定义全局变量
int isEmpty=0;//标志,判断链表是否为空

//!!!定义单链表结构体!!!
typedef struct Node{
int NUM;//类型总数
char NAME[100];//各类型名称
int num; //各类型下的货物总数
struct Node*next;
}Node;

//函数声明
Node*create(int n,Node*L);
Node* delet(Node*L,int del_n);
Node*input(Node*L);
Node*output(Node*L);
Node*outnum(Node*L);
Node*outname(Node*L);
Node*current(Node*L);
void search(Node*L);
void print(Node*L);
void searchnum(Node*L);
void searchname(Node*L);
void display(int n,Node*L);
//========新增加的函数========
Node*append(Node*L);

//主函数
void main()
{
//创建文件
FILE*fp;
fp = fopen("storehouse.txt","w");

int x;
int n;//初次输入的大小 
int del_n;//删除的货物类型编号 
Node *L;
if(!(L=(Node *)malloc(sizeof(Node)))) //分配空间
{
printf("\n");
exit(1);
}

printf("欢迎使用我的仓库管理系统!\n"); 
while(1)
{
    //主菜单开始 
    printf("==========================\n");
    printf("1.显示货物类型列表\n");
    printf("2.增加货物类型\n");
    printf("3.删除货物类型\n");
    printf("4.货物入库\n");
    printf("5.货物出库\n");
    printf("6.库存显示\n");
    printf("7.退出\n");
    printf("==========================\n");
    //主菜单结束
    printf("选择1-7:");
    scanf("%d",&x); 
    switch(x)
    {
        case 1:printf("请输入最初的货物类型数量:\n");
               scanf("%d",&n);
               create(n,L);
               break;
        case 2:
               break;
        case 3:printf("******请输入要删除货物类型的编号:******\n");
               scanf("%d",&del_n);
               printf("删除成功!\n");
               delet(L,del_n);
               break;
        case 4:;break;
        case 5:;break;
        case 6:display(n,L);break;
        case 7:printf("bye!see you next time!\n");
               exit(0);
               break;
        default:printf("input error!\nplaese input1-7");
    }       
}           

}

//函数
//1.创建链表节点
Node*create(int n,Node*L)
{
Node*pTail=L;
L->next=NULL;
Node*p;
//利用尾插建立单链表
int i;
for(i=1;i<=n;i++)
{

p=(Node*)malloc(sizeof(Node));
if(p==NULL)
{
printf("申请内存空间失败!\n");
}

printf("请输入第%d种类型编号:",i);
scanf("%d",&p->NUM);
printf("请输入第%d种类型名称:",i);
scanf("%s",&p->NAME);
printf("请输入第%d种类型库存:",i);
scanf("%d",&p->num);
putchar('\n');
pTail->next=p;
pTail=p;
}
p->next=NULL;
return L;
}

//货物显示函数
void display(int n,Node*L)
{
Node*p;
p=(Node*)malloc(sizeof(Node));
p=L->next;;
int i=0;
for(i=0;i //{
//while(p!=NULL)
{
printf("第%d种类型名称:",p->NUM);
printf("%s\n",p->NAME);
printf("第%d种类型库存:",p->NUM);
printf("%d\n",p->num);
putchar('\n');
p=p->next;
//}
}

}

//删除货物类型
Node*delet(Node*L,int del_n)
{
Node *del_p,*p;
p = L;
del_p = L;
if(del_n==1)
{
L=p->next;
free(del_p);
}
int i;
for(i=1;i {
p=p->next;
}
del_p=p->next;
p->next=del_p->next;
free(del_p);
return L;
}

4个回答

Node*create(int n,Node*L);
Node* delet(Node*L,int del_n);
Node*input(Node*L);
Node*output(Node*L);
Node*outnum(Node*L);
Node*outname(Node*L);
Node*current(Node*L);
void search(Node*L);
void print(Node*L);
void searchnum(Node*L);
void searchname(Node*L);
void display(int n,Node*L);

没看懂问的是什么,简单的单链表操作吗?

天天超市

货物类型总数 货物类型名称 该类型下货物总数
1 食物 100
2 日用品 100
3 服装 100
比如这是仓库信息 想要将他们赋到链表里

1.遵循先链后断的原则,你可以检查下;
2.插后面是要一个个的插,不能把所有数据同时插入;

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
求大侠帮忙:C语言程序设计---编程题(以下所有题目程序应是非递归的)
1. 编写一个函数insert(s1,s2,ch),实现在字符串s1中的指定字符ch位置处插入字符串s2. 2. 学校工会组织活动,要求有8名教师参加,这8名教师将分别从A学院3名教师、B学院5名教师、C学院6名教师中任意抽取,且其中必须有B学院的教师参加,请编程输出所有可能的方案 3. 已知在C盘根目录下存有文本文件“file1.txt”,编程统计文件“file1.txt”中每个字母字符和每个数字字符出现的频率,在屏幕上显示统计结果,并将统计结果写入磁盘文件“file2.txt”中 4. 输入一个字符串,内有数字和非数字字符,如:AS234fgh456d 17968x7654,将其中连续的数字作为一个整体,依次存放到一数组a中,例如234存入a[0],456存入a[1],…,编程统计其共有多少个整数,并输出这些数。要求: 1) 编写函数完成将字符串中连续的数字作为一个整体,依次存放到一数组a中 2) 在主函数中完成数据的输入与结果的输出 5. 按由大到小的顺序对一个含有N个整型数据的数组A[N]进行排序,利用如下改进的选择排序方法:第一次选出最大者存入A[1],第二次选出最小者存入A[N],第三次选出次大者存入A[2],第四次选出次小者存入A[N-1],如此大小交替地选择,直到排序完成。要求: 1) 编写函数sort完成排序 2) 在主函数中完成数据的输入与结果的输出 6. 已知用两个单链表分别存储的两个字符串,均按递增次序排列。编程实现将这两个单链表归并为一个按数据域值递减次序排列的单链表。要求: 1) 单链表中每个结点只存放一个字符 2) 利用原链表中的结点空间存储归并后的单链表,不另外生成新链表 3) 单链表的建立写一函数create实现 4) 两个链表归并过程写一函数sub实现 5) 输出结果写一函数output实现 6) 主函数调用这三个函数完成程序功能
c语言怎么把一个双向链表写入文件
用c语言这一个双向链表,然后用fwrite写入文件,用fread读取,这个过程和单链表是一样的吗?
C语言链表与文件 从文件读数据到链表里
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> //定义全局变量 int isEmpty=0;//标志,判断链表是否为空 //!!!定义单链表结构体!!! typedef struct Node{ int NUM;//类型总数 char NAME[100];//各类型名称 int num; //各类型下的货物总数 struct Node*next; }Node; //函数声明 Node*create(int n,Node*L); Node*input(Node*L); Node*output(Node*L); Node*outnum(Node*L); Node*outname(Node*L); Node*current(Node*L); void search(Node*L); void print(Node*L); void searchnum(Node*L); void searchname(Node*L); void display(int n,Node*L); //========新增加的函数======== Node*append(Node*L); //主函数 void main() { //创建文件 FILE*fp; fp = fopen("storehouse.txt","w"); fwrite(); fclose(fp); int x; int n;//初次输入的大小 Node *L; if(!(L=(Node *)malloc(sizeof(Node)))) //分配空间 { printf("\n"); exit(1); } printf("欢迎使用我的仓库管理系统!\n"); while(1) { //主菜单开始 printf("==========================\n"); printf("1.显示货物类型列表\n"); printf("2.增加货物类型\n"); printf("3.删除货物类型\n"); printf("4.货物入库\n"); printf("5.货物出库\n"); printf("6.库存显示\n"); printf("7.退出\n"); printf("==========================\n"); //主菜单结束 printf("选择1-7:"); scanf("%d",&x); switch(x) { case 1:;break; case 2:printf("请输入最初的货物类型数量:\n"); scanf("%d",&n); create(n,L); break; case 3:;break; case 4:;break; case 5:;break; case 6:display(n,L);break; case 7:;break; default:printf("input error!\nplaese input1-7"); } } } =========================== 想要读入货物信息:货物名称 货物价格 所属类型?这个怎么搞! [图片说明](https://img-ask.csdn.net/upload/201805/29/1527585662_34177.png) //函数 //1.创建链表节点 Node*create(int n,Node*L) { Node*pTail=L; L->next=NULL; Node*p; //利用尾插建立单链表 int i; for(i=1;i<=n;i++) { p=(Node*)malloc(sizeof(Node)); if(p==NULL) { printf("申请内存空间失败!\n"); } printf("请输入第%d种类型编号:",i); scanf("%d",&p->NUM); printf("请输入第%d种类型名称:",i); scanf("%s",&p->NAME); printf("请输入第%d种类型库存:",i); scanf("%d",&p->num); putchar('\n'); pTail->next=p; pTail=p; } p->next=NULL; return L; } //货物显示函数 void display(int n,Node*L) { Node*p; p=(Node*)malloc(sizeof(Node)); p=L->next;; int i=0; for(i=0;i<n;i++) //{ //while(p!=NULL) { printf("第%d种类型名称:",p->NUM); printf("%s\n",p->NAME); printf("第%d种类型库存:",p->NUM); printf("%d\n",p->num); putchar('\n'); p=p->next; //} } }
用C语言计算一个单链表的长度,单链表的定义如下:要求使用递归,不得出现循环。
用C语言计算一个单链表的长度,单链表的定义如下:要求使用递归,不得出现循环。
求一个关于C语言中有关文件和链表的一个程序
我们老师布置了一道题:有A和B两个文件夹,每个文件夹下面都有若干子目录。但是 不知道目录里面文件的类型和具体的文件数目。现在要创建一个C文件夹,对C文件夹 的要求是:(1)C文件夹下面子目录的文件名和文件长度是A的,打开的内容是B的( 打开之后只要内容是B的,不要求内容完整与否)。(2)通过键入命令或是其他方式 C文件夹可以直接恢复到B文件夹。要求使用链表完成。 我们老师只把题目说了这些,他说对A、B文件夹的定义让我们自己讨论吧。能实现他所 说的基本情况也行。可是我完全没有头绪,希望各位大神帮帮忙。
小白提问-关于单链表的插入-C语言
关于单链表的插入问题,尝试了很多次,不清楚问题出在哪,希望大牛能够帮助我指出代码中存在的问题,感激万分。 ``` #include<stdio.h> #include<stdlib.h> struct Link { int num; struct Link *next; }; void getInput(struct Link *num)//函数1 读入数据 { printf("input a number: "); scanf("%d", &num->num); } void rank_num(struct Link **link, struct Link *num)//函数2 排序插入 { struct Link *temp; struct Link *current; current = *link; while(num >= current->num || current->next != NULL) { if(current->next != NULL) { temp = current; current = current->next; } } if(current->next == NULL) { current->next = num; num->next = NULL; } else { temp->next = num; num->next = current; } } void printLink(struct Link *link)//函数3 打印结果 { while(link->next != NULL) { printf("%d ", link->num); link = link->next; } return; } void releaseLink(struct Link **link)//函数4 释放存储空间 { struct Link *temp; while(*link != NULL) { temp = *link; *link = (*link)->next; free(temp); } } int main()//主函数 main { struct Link *link = NULL; struct Link *num; num = (struct Link*)malloc(sizeof(struct Link)); for(int i=0; i<3; i++) { printf("请输入数据\n"); getInput(num); if(link != NULL) { rank_num(&link, num); } else { link = num; num->next = NULL; } } printLink(link); releaseLink(&link); return 0; } ```
C语言填空题求教--链表合并问题,并求大侠给出详细解释
_void merge(struct node *p,struct node *q)_ { struct node *s,*r; r=p; while()//填空1 { if(r->next->data<q->next->data) () //填空2 else if(r->next->data>q->next->data) { s=q->next; ()=s->next;//填空3 s->next=();//填空4 ()=s;//填空5 ();//填空6 } else { r=r->next; s=q->next; ();//填空7 free(s); } } if()//填空8 { r->next=q->next; free(q); } } C语言填空题求教===假设链表p和链表q中的结点值都是整数,且按结点值递增次序链接起来的带表头结点的单链表,在每个链表中,每个结点的值各不相同,但链表p和链表q可能有值相同的结点。下面函数将链表q合并到链表p中,使得合并后的链表仍为按结点值递增有序的单链表,且链表中每个结点的值各不相同。
C语言fopen打开文件失败
一个单链表创建学生信息的作业,要求要用文件的输入输出。 打全部路径会出现如图的错误。 打“C:\\\student_info.txt”也不行。 把文件移到project8的文件夹下面打“student_info.txt”也不行。 已确定文件在文件夹内是存在的。F11调试确定就是fopen那块儿出的问题 求问怎么改......崩溃 ![图片说明](https://img-ask.csdn.net/upload/201912/04/1575461393_230930.png) #define _CRT_SECURE_NO_DEPRECATE #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int ElemType; typedef int Status; FILE *fp; /*①单链表数据结构定义*/ typedef struct { int num; //学号 //char name[20]; //姓名 //int sex; //性别 //int dorm; //宿舍 //int tel; //电话 }Student; //结点定义 typedef struct LNode { Student data; struct LNode *next; }LNode; //链表定义 typedef struct { LNode* head; //指向头结点的指针 int length; //链表长度 }LinkList; /*②单链表基本操作接口定义*/ //初始化链表:创建头结点,给L字段赋初值 //返回一个空的单链表 Status InitList(LinkList &L); //初始条件:线性表L已经初始化 //采用头插法创建一个单链表,元素类型为整形,输入-9999时结束 Status CreateFromHead(LinkList &L); //初始条件:线性表L已经初始化 //采用尾插法创建一个单链表,元素类型为整形,输入-9999时结束 Status CreateFromTail(LinkList &L); //初始条件:线性表L已经存在 //打印出所有元素 void PrintElem(LinkList L); //初始条件:线性表L已经存在 //查找第i个结点,若找到(1≤i≤n),则由e返回其值 Status GetElem_L(LinkList L, int i, ElemType &e); //初始条件:线性表L已经存在 //在单链线性表L的第i个元素之前插入元素e Status ListInsert_L(LinkList &L, int i, ElemType e); //初始条件:线性表L已经存在 //删除第i个元素,并由e返回其值 Status ListDelete_L(LinkList &L, int i, ElemType &e); int main() { LinkList L; InitList(L); CreateFromHead(L); PrintElem(L); system("pause"); } /*③部分单链表操作的实现函数*/ Status InitList(LinkList &L) //初始化链表 { L.head = (LNode*)malloc(sizeof(LNode)); if (!L.head)exit(OVERFLOW); L.length = 0; L.head->next = NULL; return OK; } //初始条件:线性表L已经初始化 //采用头插法创建一个单链表,元素类型为整形,输入-9999时结束 Status CreateFromHead(LinkList &L) { LNode *s; int flag = 1; int e; L.head = (LNode*)malloc(sizeof(LNode)); L.head->next = NULL; while (flag) { fp = fopen("C:\Users\解诗雨\source\student_info.txt", "r+"); if (fp==NULL) { printf("打不开\n"); return OK; } fscanf(fp,"%d", &e); if (e) { s = (LNode*)malloc(sizeof(LNode)); s->data.num = e; s->next = L.head->next; L.head->next = s; ++L.length; } else flag = 0; fclose(fp); } return OK; } //初始条件:线性表L已经存在 //打印出所有元素 void PrintElem(LinkList L) { LNode* p; p = L.head->next; printf("当前的结点数为:%d\n", L.length); while (p) { printf("%4d ", p->data.num); p = p->next; } printf("\n"); } 文本: ![图片说明](https://img-ask.csdn.net/upload/201912/04/1575462569_672809.png) 因为现在还在创建链表其他还没弄完...
【C语言-链表】请问怎么判断链表已经被销毁?
【问题描述】学习链表,销毁链表总感觉没有成功,请问怎么确定链表确实被销毁了?为什么其余节点的内容没有变化? 【代码】 ``` #include<stdio.h> #include<stdlib.h> #include<string.h> struct link_list { int num; char name[20]; struct link_list *next; }; typedef struct link_list ls; int icount = 0; /*链表长度*/ /*链表创建函数*/ ls* create() { ls *phead = NULL; ls *pend, *pnew; char flag; /******************************************************************* 链表循环赋值 *******************************************************************/ while(1) { pnew = (ls*)malloc(sizeof(struct link_list));/*分配空间*/ if(pnew == NULL) /*检测内存分配情况*/ { printf("内存分配失败\n"); return NULL; } if(0 == icount)/*如果是第一个节点*/ { icount++; pnew->next = NULL;/*尾指针指向空*/ phead = pnew;/*头指针指向头节点*/ pend = pnew;/*保存当前指针*/ printf("phead=%d\n", phead); printf("输入姓名:\n"); scanf("%s", pnew->name); printf("输入学号:\n"); scanf("%d", &pnew->num); printf("是否结束输入?y结束,n继续\n"); getchar(); flag = getchar(); if(flag == 'y') { return phead; } } else { icount++; pend->next = pnew; pend = pnew; pnew->next = NULL; printf("输入姓名:\n"); scanf("%s", pnew->name); printf("输入学号:\n"); scanf("%d", &pnew->num); printf("是否结束输入?y结束,n继续"); getchar(); flag = getchar(); if(flag == 'y') { return phead; } } } } /*遍历输出*/ void print(ls* phead) { ls* ptemp; ptemp = phead; while(NULL != ptemp) { printf("\n\n学号:%d\n姓名:%s\n", ptemp->num, ptemp->name); ptemp = ptemp->next; } } /*销毁*/ void damage(ls* phead) { ls *ptemp1; do { printf("删除前节点内容%d 地址phead=%d\n", phead->num, phead); ptemp1 = phead->next; /*保存当前销毁节点指向的地址*/ printf("被销毁节点指向的地址ptemp1=%d\n", ptemp1); free(phead); /*释放当前指针指向的节点空间*/ printf("释放后节点内容%d\n", phead->num); printf("释放后phead=%d\n", phead); phead = ptemp1; /*获取下一个节点地址*/ printf("重新赋值phead=%d\n\n", phead); }while(ptemp1 != NULL); } int main(void) { ls* phead = NULL; int lcat, lcat_del; phead = create(); printf("主函数头指针地址%d\n", phead); print(phead); damage(phead); return 0; } ``` 【运行结果】 ![图片说明](https://img-ask.csdn.net/upload/201912/21/1576889257_479546.png) ![图片说明](https://img-ask.csdn.net/upload/201912/21/1576889268_527655.png)
C语言链表文件题请看看这个有什么问题
``` #include<stdio.h> #include<string.h> #include<stdlib.h> struct stu{ int num; char name[20]; int score; };//定义一个学生信息结构体 struct st{ int num; char name[20]; int score; struct st *next; };//定义一个学生信息链表结点 struct st *top,*rear;//定义链表头尾指针 struct st* push (struct stu x) { struct st *p; p=(struct st*)malloc(sizeof(struct st)); p->num=x.num; strcpy(p->name,x.name); p->score=x.score; p->next=NULL; if(rear==NULL) { rear=top=p; } else{ rear->next=p; rear=p; } return p; }//将结构体元素依次放入链表尾 void sort (struct st *top) { int flag; struct st *q,*s; int temp1,temp3; char temp2[20]; for(q=top->next;q->next!=NULL;q=q->next) { flag=0; s=q->next; if(q->num<s->num) { flag=1; temp1=q->num; q->num=s->num;s->num=temp1; temp3=q->score;q->score=s->score;s->score=temp3; strcpy(temp2,q->name);strcpy(q->name,s->name);strcpy(s->name,temp2); } if(flag==0) break; } }//按照学号从大到小的顺序进行排序节点 int main() { FILE *in,*out; in=fopen("in.txt","r"); out=fopen("out.txt","w");//打开文件 int n,m; struct stu card; scanf("%d",&n); m=n; while(m!=0) { fread(&card,sizeof(struct stu),1,in); if(card.num>0) { m--; push(card); } }//若学号符合要求则连人链表 sort(top); struct st *k; for(k=top;k!=NULL;k=k->next) { fwrite(&card,sizeof(struct stu),1,out); }//写入out文件 fclose(in); fclose(out);//关闭文件 return 0; } ``` 为啥运行后没有反应呢 out文件中没有我想要的数据
已知一个带有头结点的单链表,设计算法将该单链表复制一个拷贝,急急急
已知一个带有头结点的单链表,设计算法将该单链表复制一个拷贝,急急急
c语言单链表每次进行查找操作和排序操作的时候程序就闪退
刚学单链表,但是程序每到进行查找操作和排序操作,程序就闪退 编译的时候也没有报错,深夜求助,下面是测试程序的一些片段,单链表初始化和其他操作如插入、删除、输出等都没什么问题,就是一到下面两种操作就闪退了,两个操作函数都是void型的 ``` Linklist L; ElemType *e; case 9:printf("请输入元素的位置\n");scanf("%d",&flag);GetElem(L,flag,e);break;//找到flag位置的数据并print出来 case 14:LinkSort(&L);break;//对单链表中的数据排序 ``` 下面是查找操作的函数 ``` void GetElem(Linklist L,int i,Elemtype *e) { if (L==NULL) { printf("单链表不存在\n"); } else { if (L->next==NULL) { printf("单链表为空\n"); }//前提判断 else{ int length; length=ListLength(L); if (i>length||i<0) { printf("输入错误\n"); }//判断输入合法性 else { int j=0; for (j = 0; j < i; j++) { (*e)=(L->next)->data; L=L->next; }//循环i次,将L->next指向第i个节点,并传值给*e printf("第%d个位置的数据为%d\n",i,*e); } } } } ``` 下面是排序操作的函数,排序操作的我的思想是,创建一个新单链表,然后将传入的单链表的每个节点的数据先与新单链表中的数据进行比较,从小到大确定位置,然后再用插入操作,将每个数据插入新的单链表中 ``` void LinkSort(Linklist *L) { if ((*L)==NULL) { printf("单链表不存在\n"); } else { int l=ListLength(*L); if (l<2) { printf("单链表中至少要有两个元素才能进行排序\n"); } else { int i; Linklist p=(*L)->next; Linklist q,s; q=(Linklist)malloc(sizeof(LNode)); q->next=NULL; s=(Linklist)malloc(sizeof(LNode)); s->data=p->data; s->next=NULL; q->next=s;//先将传入单链表的第一个节点的数据添加到新单链表中去 Linklist r=q->next; p=p->next; while(p->next!=NULL) { i=1;//i是用来确定后续插入位置的 while((p->data)>(r->data)&&r->next!=NULL) { i++; r=r->next; } if ((p->data)>(r->data)) { i++; ListInsert(&q,i,p->data); } else ListInsert(&q,i,p->data); p=p->next; r=q->next; } i=1; while((p->data)>(r->data)&&r->next!=NULL) { i++; r=r->next; } if ((p->data)>(r->data)) { i++; ListInsert(&q,i,p->data); } else ListInsert(&q,i,p->data); *L=q; printf("排序完成\n"); } } } ``` 再附上插入操作函数 ``` void ListInsert(Linklist *L,int i,Elemtype e) { if (*L==NULL) { printf("单链表不存在\n"); } else { int length=ListLength(*L); if (i<1||i>length+1) { printf("输入错误\n"); }//判断输入的合法性 else { Linklist p=*L; int j=0; for (j = 0; j <i-1 ; j++) { p=p->next; }//通过循环使p指向所要插入节点位置的前一个节点 Linklist *r; (*r)=(Linklist)malloc(sizeof(LNode)); (*r)->data=e; (*r)->next=p->next; p->next=*r;//将新建立的节点插入 printf("插入成功\n"); } } } ``` 这是操作情景,直接退回桌面了 呜呜呜 ![图片说明](https://img-ask.csdn.net/upload/201910/21/1571593640_443751.png)
关于一个c++链表的程序设计
我现在的问题卡在如果要抓取链表里面的数据并且显示出来,我可能需要创建一个三维的数组用来分别输入月份(Monat),支出类别(Kategorie)还有花费金额(Betrag),同时我要判断每次抓取的数据输入月份以及支出类别是否相同。想请问下有没有更好的思路解决这个问题。题目要求如下:![图片说明](https://img-ask.csdn.net/upload/201912/16/1576448637_633877.png) 我的代码还没写完,大概整体如下: 谢谢各位! ```#include <iostream> #include <cstdlib> #include <fstream> using namespace std; class Artikel { // friend Deklaration friend class Rechnungsliste; private: int Monat; string Kategorie; float Betrag; int Nummer; Artikel *nachfolger; public: Artikel(int m, string k, float b,int n) : Monat(m), Kategorie(k), Betrag(b),Nummer(n) { nachfolger = 0; } string get_Kategorie () { return Kategorie; } float get_Betrag () { return Betrag; } int get_Monat () { return Monat; } int get_Nummer(){return Nummer;} void set_Kategorie (string k) { Kategorie = k; } void set_Betrag (float b) { Betrag = b; } void set_Monat (int m) { Monat = m; } Artikel *next () { return nachfolger; } void datenausgeben() { cout<<get_Monat()<<endl; cout<<"--------------------------------------------------------------------"<<endl; cout<<"\t"<<get_Kategorie()<<":\t"<<"\t\t\t"<<get_Betrag()<<"\t"<<"\t"<<get_Nummer()<<endl; } }; void Kategorieanzeige() { cout<<"[1]\t"<<"Tank"<<endl; cout<<"[2]\t"<<"Kleidung"<<endl; cout<<"[3]\t"<<"Urlaub"<<endl; cout<<"[4]\t"<<"Essen"<<endl; cout<<"[5]\t"<<"Bus"<<endl; cout<<"[6]\t"<<"Bahn"<<endl; cout<<"[7]\t"<<"Schule"<<endl; cout<<"[8]\t"<<"Fitniss"<<endl; } class Rechnungsliste { private: Artikel *anfang; public: Rechnungsliste () { anfang = 0; } Artikel *begin () { return anfang; } void einfuegen(Artikel *k) { k->nachfolger = anfang; anfang = k; } Artikel* finde(int nm) { Artikel *kp; for (kp = begin(); kp != 0; kp = kp->next()) if (kp->get_Monat() == nm) break; return kp; } Artikel* finde(string zl) { Artikel *kp; for (kp = begin(); kp != 0; kp = kp->next()) if (kp->get_Kategorie() == zl) break; return kp; } void remove(int yue) { if(anfang!=NULL) { if(anfang->get_Monat() == yue) //prüfe ob Anfang unser Satz ist, da es sein kann, dass wir keinen Nachfolger haben { anfang = anfang->next(); //falls ja, dann ist unser neuer Anfang der Nachfolger } else if(anfang->get_Monat() != yue && anfang->next() == NULL) //prüfe ob Anfang ungleich Satz ist und ob nächster Datensatz NULL ist { return; } else { Artikel *kp; for (kp = begin(); kp != 0; kp = kp->next()) { if(kp->next()->get_Monat() != yue && kp->next()->next() == NULL) //prüfe ob Nachfolger-Satz ungleich meinem Satz und ob Nachfolger vom Nachfolger gleich NULL break; //wird benötigt, falls wir beim vorletzten sind & letzter ungleich ist, da letzter keine Daten liefert else if (kp->next()->get_Monat() == yue) //prüfe ob Nachfolger unser Satz ist { kp->nachfolger = kp->next()->next(); //falls ja, dann ist unser neuer Nachfolger der Nachfolger vom Nachfolger des aktuellen Objekts break; } } } } } bool empty() { return anfang == 0; } Artikel *clear() { // Entfernen eines Knotens vom Anfang der Liste Artikel * kp = anfang; if (kp != 0) { cout << kp->get_Monat() << " entfernt." << endl; anfang = kp->nachfolger; kp->nachfolger = 0; } return kp; } }; Rechnungsliste liste; v/*oid display_by_month() { Artikel*kp=NULL; float display_month[12][8]; for(int i=0;i<12;i++) { for(int j=0;j<8;j++) { display_month[i][j]=0.0; } } for(kp=liste.begin();kp!=0;kp=kp->next()) switch(kp->get_Monat()) { case 1: int index_month=kp->get_Monat(); display_month[index_month][0]+=kp->get_Betrag(); break; case 2: int index_month=kp.get_Monat(); display_month[index_month][1]+=kp->get_Betrag(); break; case 'Urlaub': int index_month=kp.get_Monat(); display_month[index_month][2]+=kp->get_Betrag(); break; case 'Essen': int index_month=kp.get_Monat(); display_month[index_month][3]+=kp->get_Betrag(); break; case 'Bus': int index_month=kp.get_Monat(); display_month[index_month][4]+=kp->get_Betrag(); break; case 'Bahn': int index_month=kp.get_Monat(); display_month[index_month][5]+=kp->get_Betrag(); break; case 'Schule': int index_month=kp.get_Monat(); display_month[index_month][6]+=kp->get_Betrag(); break; case 'Fitniss': int index_month=kp.get_Monat(); display_month[index_month][7]+=kp->get_Betrag(); break; default: break; } } */ void erfassen() // Artikel erfassen { int Monat; float Betrag; string Kategorie; int Nummer; int nr=0; cout<<"Nummer: "<<endl; cin>>Nummer; Artikel *tmpArtikel = NULL; tmpArtikel = liste.finde(Nummer); if (tmpArtikel == 0) { cout<<"Monat: "<<endl; cin>>Monat; Kategorieanzeige(); cout<<"Nummer von Kategorie: "<<endl; cin>>nr; switch(nr) { case 1: { Kategorie="Tank"; break; } case 2: { Kategorie="Kleidung"; break; } case 3: { Kategorie="Urlaub"; break; } case 4: { Kategorie="Essen"; break; } case 5: { Kategorie="Bus"; break; } case 6: { Kategorie="Bahn"; break; } case 7: { Kategorie="Schule"; break; } case 8: { Kategorie="Fitniss"; break; } default: { cout<<"Falsche auswahl."<<endl; system("pause"); break; } } cout<<"Betrag: "<<endl; cin>>Betrag; cout<<"Monat: "<<Monat<<" "<<"Kategorie: "<<Kategorie<<" "<<"Betrag: "<<Betrag<<"Euro"<<" "<<"Rechnungsnummer: "<<Nummer<<endl; Artikel *objekt = new Artikel(Monat,Kategorie,Betrag,Nummer); //neues Objekt mit neu zugewiesener Adresse erstellen liste.einfuegen(objekt); cout << "Artikel hinzugef\201gt." << endl; } else { cout << "Artikel " << Nummer << " bereits vorhanden. " << endl; } } void aendern() // Artikel ändern { int Monat; float Betrag; string Kategorie; int nr=1,auswahl; Artikel *objekt; cout<<"Monat\t Kategorie\t Betrag\t"<<endl; for (objekt=liste.begin(); objekt != 0; objekt = objekt->next()) { cout << "[" << nr << "]\t"; objekt->datenausgeben(); cout << endl; nr++; } cout << "Welcher Artikel soll geaendert werden?" << endl << "Nummer eingeben: "; do { cin >> auswahl; }while(auswahl <= 0 || auswahl >= nr); nr = 1; for (objekt=liste.begin(); objekt != 0; objekt = objekt->next()) { if(auswahl==nr) break; nr++; } system("cls"); cout << "Was soll abgeaendert werden?" << endl << "[1] Monat: " << objekt->get_Monat() << endl << "[2] Kategorie: " << objekt->get_Kategorie() << endl << "[3] Betrag: " << objekt->get_Betrag() << endl << "Nummer eingeben: "; do { cin >> auswahl; }while(auswahl <= 0 || auswahl >= 4); if(auswahl==1) { cout << "Neue Monat: "; cin >> Monat; objekt->set_Monat(Monat); } else if(auswahl==2) { cout << "Neue Kategorie: "; cin >> Kategorie; objekt->set_Kategorie(Kategorie); } else if(auswahl==3) { cout << "Neuer Betrag: "; cin >> Betrag; if(Betrag<=0) throw (string)"Betrag"; objekt->set_Betrag(Betrag); } cout << "Artikel ge\204ndert." << endl; } void ausgabe() // Alle Artikel mit Gesamtpreis ausgeben { float gesamtbetrag=0; Artikel *objekt; int i=0; int j=0; float gesamtbetrag1=0; int nr=0; string a[8]; int b[12]; int c[100]; string tmp; float bb; cout<<"Monat\t Kategorie\t\t\t Betrag\t Rechnungsnummer"<<endl; for(objekt=liste.begin();objekt!=0;objekt=objekt->next()) { if(objekt=liste.begin()) { b[0]=objekt->get_Monat(); a[0]=objekt->get_Kategori(); c[0]=objekt->get_Betrag(); } else { break; } if(objekt!=liste.begin()) { for(i=0;i<12;i++) { if(objekt->get_Monat()==b[i]) { } else{ b[objekt->get_Monat()-1]==objekt->get_Monat(); a[0]=get_Kategorie(); c[0]=get_Betrag(); for(j=0;j<8;j++) { a[j]=objekt->get_Kategorie(); if(objekt->get_Kategorie()==a[j]) { }else{} } } } } else { b[i+1]=objekt->get_Monat(); } } } for(j=0;j<8;j++) { a[j]=objekt->get_Kategorie(); for(c=0;c<100;c++) { c[j]=objekt->get_Betrag(); } } } cout<<"\t\t\t\t\t"<<objekt->get_Betrag()<<"Euro"<<endl; gesamtbetrag+=objekt->get_Betrag(); nr++; } if(nr>=2) { cout<<"--------------------------------------------------------------"<<endl; cout<<"Gesamtbetrag: "<<"\t\t\t\t"<<gesamtbetrag<<"Euro"<<endl; } } /*void ausgabe2()//Rechnunslistesbetrag zusammenausgeben { string Kategorie; float Betrag; int Monat; float gesamtbetrag2=0; Artikel *objekt; Artikel *tmpArtikel; tmpArtikel=liste.finde(Kategorie); for(objekt=liste.begin();objekt!=0;objekt=objekt->next()) { if(tmpArtikel==0) { cout<<"\t"<<objekt->get_Kategorie()<<": "<<objekt->get_Betrag()<<"Euro."<<endl; } else { gesamtbetrag2+=objekt->get_Betrag()+tmpArtikel->get_Betrag(); cout<<"\t"<<objekt->get_Kategorie()<<": "<<gesamtbetrag2<<"Euro."<<endl; } } }*/ void loeschen() // Artikel löschen { int Monat; float Betrag; string Kategorie; int nr=1,auswahl; Artikel *objekt; cout<<"Monat\t Kategorie\t Betrag\t"<<endl; for (objekt=liste.begin(); objekt != 0; objekt = objekt->next()) { cout << "[" << nr << "]\t"; objekt->datenausgeben(); cout << endl; nr++; } cout << "Welcher Artikel soll geloescht werden?" << endl << "Nummer eingeben: "; do { cin >> auswahl; }while(auswahl <= 0 || auswahl >= nr); nr = 1; for (objekt=liste.begin(); objekt != 0; objekt = objekt->next()) { if(auswahl==nr) break; nr++; } liste.remove(objekt->get_Monat()); cout << "Artikel geloescht." << endl; } void leeren()// Einkaufsliste leeren { while(!liste.empty()) liste.clear(); cout << endl << "Rechnungslist ist leer!" << endl; } int main() { int auswahl = 1; Artikel *tmpObjekt = NULL; Rechnungsliste list; do { system("cls"); cout<<"---- Rechnungsliste ----"<<endl; cout<<"1.Rechnung hinzufuegen."<<endl; cout<<"2.Rechnunsliste Ausgeben."<<endl; cout<<"3.Rechnunslistesbetrag zusammenausgeben."<<endl; cout<<"4.Daten von Rechnunsliste aendern."<<endl; cout<<"5.Rechnunsliste loeschen."<<endl; cout<<"6.Rechnunsliste leeren."<<endl; cout<<"0.Programm beenden."<<endl; cout<<"Auswahl: "<<endl; cin>>auswahl; cout<<endl<<endl; try { switch(auswahl) { case 0: //End cout << "Auf Wiedersehen!" << endl; break; case 1://Rechnung hinzuguegen system("cls"); erfassen(); system("pause"); break; case 2://Rechnungsliste Ausgabe if(liste.begin()!=0) { system("cls"); ausgabe(); } else cout<<"List ist leer."<<endl; system("pause"); break; case 3://Rechnunslistesbetrag zusammenausgeben if(liste.begin()!=0) { system("cls"); void display_by_month(); } else cout<<"List ist leer."<<endl; system("pause"); break; case 4://Daten von Rechnunsliste aendern if(liste.begin()!=0) { system("cls"); void aendern(); } else cout << "Liste ist leer." << endl; system("pause"); break; case 5://Rechnungslist loeschen if(liste.begin()!=0) { system("cls"); void loeschen(); } else cout<<"List ist leer."<<endl; system("pause"); break; case 6://Rechnungslist leeren if(liste.begin()!=0) { system("cls"); void leeren(); } else cout << "Liste ist leer." << endl; system("pause"); break; default: cout<<"Falsche auswahl."<<endl; system("pause"); break; } } catch(string msg) { cout << msg << " darf nicht negativ oder Null sein!" << endl << "Vorgang abgebrochen." << endl; system("pause"); } }while(auswahl!=0); system("pause"); return 0; } ```
c语言 图书管理程序设计,当对图书信息进行修改时,如若未找到则程序出错
#include <stdio.h> #include <stdlib.h> #include <string.h> //定义一本书 struct book { char name[10]; char writer[10]; char publisher[21]; char price[5]; }; struct Node { //int data; struct book data; struct Node* next; }; //创建表 struct Node* createList() { //结构体变量表示表头 //指针--->变量 动态内存申请 struct Node* headNode = (struct Node*)malloc(sizeof(struct Node)); headNode->next = NULL; return headNode; } //创建结点 struct Node* createNode(struct book data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode; } //插入结点 void insertNodeByHead(struct Node* headNode, struct book data) { struct Node* newNode = createNode(data); //表头法 newNode->next = headNode->next; headNode->next = newNode; } //指定位置删除 void deleteAppoinNode(struct Node* headNode, char* name) { //struct book struct Node* posNode = headNode->next; struct Node* posFrontNode = headNode; if (posNode == NULL) { printf("数据为空,无法删除!\n"); return; } //书名是字符串,字符串:strcmp while (strcmp(posNode->data.name,name)) { posFrontNode = posNode; posNode = posFrontNode->next; if (posNode == NULL) { printf("未找到指定位置无法删除!\n"); return; } } //找到了 posFrontNode->next = posNode->next; free(posNode); } //查找功能 struct Node* searchInfoByData(struct Node* headNode, char *name) { struct Node* pMove = headNode->next; if (pMove == NULL) return NULL; while (strcmp(pMove->data.name, name)) { pMove = pMove->next; } return pMove; } //打印 void printList(struct Node* headNode) { struct Node* pMove = headNode->next; //设计到数据的处理 printf("书名\t作者\t出版社\t价格\n"); while (pMove) { printf("%s\t%s\t%s\t%s\n", pMove->data.name, pMove->data.writer, pMove->data.publisher, pMove->data.price); pMove = pMove->next; } printf("\n"); } void menu() { //所有操作都同步到文件 printf("-------------【图书信息管理系统】-----------\n"); printf("\t\t1.录入图书信息\n"); printf("\t\t2.浏览图书信息\n"); printf("\t\t3.修改图书信息\n"); printf("\t\t4.删除图书信息\n"); printf("\t\t5.查找图书信息\n"); printf("\t\t0.退出系统\n"); printf("-------------------------------------------\n"); } struct Node* list = createList(); //接收指令 void keyDown() { int choice = 0; struct book data; struct Node* pMove = NULL; scanf("%d", &choice); switch (choice) { case 0: printf("正常退出!\n"); system("pause"); exit(0); break; case 1: printf("--------------【录入图书信息】-----------\n"); //插入链表 printf("请输入书名,作者,出版社,价格:\n"); fflush(stdin); //清空缓冲区 scanf("%s%s%s%s", data.name, &data.writer, data.publisher, data.price); insertNodeByHead(list, data); break; case 2: printf("--------------【浏览图书信息】-----------\n"); printList(list); //打印链表 break; case 3: printf("--------------【修改图书信息】-----------\n"); printf("请输入要修改的书名:"); scanf("%s", data.name); pMove = searchInfoByData(list, data.name); if (pMove == NULL) { printf("未找到相关信息,无法修改!\n"); system("pause"); } else { printf("请输入图书名,作者,出版社,价格:"); scanf("%s%s%s%s", data.name, &data.writer, data.publisher, data.price); strcpy(pMove->data.name, data.name); strcpy(pMove->data.writer, data.writer); strcpy(pMove->data.publisher, data.publisher); strcpy(pMove->data.price, data.price); } break; case 4: printf("--------------【删除图书信息】-----------\n"); printf("请输入删除的书名:"); scanf("%s", data.name); deleteAppoinNode(list, data.name); break; case 5: printf("--------------【查找图书信息】-----------\n"); printf("请输入要查找的书名:"); scanf("%s", data.name); pMove = searchInfoByData(list, data.name); if (pMove == NULL) { printf("未找到相关信息,无法删除!\n"); system("pause"); } else { printf("书名\t作者\t出版社\t价格\n"); printf("%s\t%s\t%s\t%s\n", pMove->data.name, pMove->data.writer, pMove->data.publisher, pMove->data.price); } break; default: printf("选择错误,重新输入\n"); system("pause"); break; } } int main() { while (1) { menu(); keyDown(); system("pause"); system("cls"); } system("pause"); return 0; }
c语言课程设计-双向链表(自学看不懂)之绝望 求大佬引路 感激涕零
![图片说明](https://img-ask.csdn.net/upload/201805/23/1527081349_209316.png) 问题: 1.操作1是不是要用文件?用一个文本文件记录 2.这个程序需不需要利用双向链表? 3.这个程序最好做几个结构体? 4.货物类型和货物入库之间存在什么关系?? 5.好绝望呀呀呀呀 6.求大佬引路 7.感激涕零 无以为报
C语言将两个递增有序单链表归并为一个降序的单链表,求大侠帮忙看看
#include <stdio.h> #include <stdlib.h> #define N 8 typedef struct list { char c; struct list *next; } SLIST; SLIST *creat(char *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i<N; i++) { q=(SLIST *)malloc(sizeof(SLIST)); q->c=a[i]; p->next=q; p=q; } p->next=0; return h; } void output(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf("\nThe list is NULL!\n"); else { printf("\nHead"); while(p->c!=0) { printf("->%c",p->c); p=p->next; } printf("->End\n"); } } SLIST *sub(SLIST *a,SLIST *b) { SLIST *pa,*pb,*r; pa=a; pb=b; r=NULL; //r为新链表头 while(pa->c!=0&&pb->c!=0) { if(pa->c< pb->c) { a=a->next; pa->next=r; r=pa; pa=a; } else { b=b->next; pb->next=r; r=pb; pb=b; } } while(pa!=NULL)//如果是表1未完,它的剩余结点倒序插入。 { a=a->next; pa->next=r; r=pa; pa=a; } while(pb!=NULL) { b=b->next; pb->next=r; r=pb; pb=b; } r=r->next; return(r); } void main() { SLIST *head1,*head2,*head3; char a[N]="abcdefg"; char b[N]="ABCDEFG"; head1=creat(a); printf("\nThe first list before merging:\n"); output(head1); head2=creat(b); printf("\nThe second list before merging:\n"); output(head2); head3=sub(head1,head2); printf("\nThe list after merging:\n"); output(head3); } /* 1.程序运行结果为: The first list before merging: Head->a->b->c->d->e->f->g->End The second list before merging: Head->A->B->C->D->E->F->G->End The list after merging: Head->g->f->e->d->c->b->a->G->F->E->D->C->B->A->?>蚉ress any key to continue ====C语言将两个递增有序单链表归并为一个降序的单链表,求大侠帮忙看看 程序运行时最后报错,为什么呢? */
c语言如何把链表数据写入文件?
在写一个通讯录管理系统,然后要把联系人的信息结构体放到链表中,然后将链表里的信息写入文件中,下次打开时还能从该文件读出数据。 链表头指针TEL,结构体中有name,tel,style,mail 四项,存入“telephone.txt"中。 我是这样写的 /*退出程序时将数据写回telephone.txt进行更新*/ void ReadBack() { FILE *TEL = fopen("telephone.txt","wt+"); ID *te = id->next; while (te != NULL) { fwrite(id,sizeof(ID),1,TEL); te = te->next; } fclose(TEL); } 结果文件中是一串乱字 是 屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯?f 请给出代码,本人初学,多谢!
今年刚刚学的C语言,没有学过链表希望大佬可以帮忙写一下源代码,谢谢了
3、定义一个用于存储学生信息的结构体,结构体内包括学号(10位数字)、姓名(字符串)、英语及数学成绩(为结构体)、总成绩等信息。编写程序,实现使用链表输入若干学生的信息,并通过链表根据总成绩对学生信息进行排序,将排好序的学生信息在控制台进行显示并将相关信息存储到文件中。(55分)
将一个链表输入文件里面
我想在一个类中的析构函数里把一个链表输入文件 在构造函数从文件输出这个链表 请问各位该怎么写?
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问