#include "stdio.h"
#include <stdlib.h>
#include <string.h>
/*定义块链结构,每行作为一个结点,有80个字符*/
typedef struct BLOCK {
char ch[80];
struct BLOCK *next;
}Node,*LinkString;
LinkString L;
void getnum(char sel[],int *n1,int *n2,int line)
{/*将存放在sel中的字符串分解出n1和n2*/
int i,k1,k2,flag=0;
k1=0;k2=0;i=1;
while(sel[i]!='\0')
if (sel[i]>='0'&&sel[i]<='9')
{
k1=k1*10+(sel[i]-'0');
flag=1;
i++;
}
else
if (sel[i]==',')
{
flag=2;
i++;
break;
};
//printf("哈哈");
while(sel[i]!='\0') {
if (sel[i]>='0'&&sel[i]<='9')
{k2=k2*10+(sel[i]-'0');i++;}
else break;
};
switch (sel[0]) {
case 'L':
case 'l':
case 'D':
case 'd':
if (k1==0) *n1=line;
else *n1=k1;
if (k2==0) *n2=*n1+10;
else *n2=k2;
if (flag==1) *n2=*n1;
if (flag==0) {
*n1=line;*n2=line+10;
}
break;
case 'I':
case 'i':
case 'E':
case 'e':
if (k1==0) *n1=line;
else *n1=k1;
break;
}
}
void loadfile(char filename[])
/*从磁盘读取指定的文件并存放在块链表中*/
{
FILE *fp;
int i;
char c;
LinkString p,q;
fp=fopen(filename,"r");
if (fp==NULL) exit(0);
i=0;p=L;
q=(LinkString)malloc(sizeof(Node));
while((c=getc(fp))!=EOF) {
q->ch[i++]=c;
if (c==10) {
q->ch[i]='\0';
q->next=NULL;
p->next=q;p=q;
q=(LinkString)malloc(sizeof(Node));
i=0;
}
}
}
void savefile(char filename[])
/*将存放在块链表中的字符存放到磁盘文件filename中*/
{
FILE *fp;
//int i,j;
//char c;
LinkString p;
fp=fopen(filename,"w");
if (fp==NULL) exit(0);
p=L->next;
while(p) {
fprintf(fp,"%s",p->ch);
p=p->next;
}
fclose(fp);
}
int display(int n1,int n2)
/*在屏幕上显示文件中第n1行到第n2行的内容*/
{
LinkString p,q,s;
int i,k;
if (n1>n2) return(0);
p=L->next;i=0;
while (p!=NULL&&i<n1) {
p=p->next;i++;
}
if (!p) return(0);
q=p->next;
while (q!=NULL&&i<n2) {
q=q->next;i++;
}
s=p;i=n1;
while (s!=q) {
k=0;printf("%2d:",i);
while (s->ch[k]!='\0') {printf("%c",s->ch[k]);k++;}
s=s->next;
i++;
}
return(1);
}
int deletechar(int n1,int n2)
/*删除文件中第n1行到第n2行的内容*/
{
LinkString p,q,s;
int i;
if (n1>n2) return(0);
p=L;i=0;
while (p!=NULL&&i<n1) {
p=p->next;i++;
}
if (!p) return(0);
q=p->next;
while (q!=NULL&&i<=n2) {
q=q->next;i++;
}
s=p->next;p->next=q;
while (s!=q) {
p=s->next;free(s);
s=p;
}
return(1);
}
int edit(int n1)
/*修改文件中第n1行的内容*/
{
LinkString p;
int i,k;
char str[80];
p=L->next;i=0;
while (p!=NULL&&i<n1) {
p=p->next;i++;
}
if (!p) return(0);
printf("Old Line(%d):",n1);
for (k=0;p->ch[k]!='\0';k++) printf("%c",p->ch[k]);
printf("New Line(%d):",n1);gets(str);
for(k=0;str[k]!='\0';k++)
p->ch[k]=str[k];
p->ch[k++]=10;
p->ch[k]='\0';
return(1);
}
int insert(int n1)
/*在文件中第n1行之前插入一行*/
{
LinkString p,s;
int i,k;
char str[80];
p=L;i=0;
while (p!=NULL&&i<n1) {
p=p->next;i++;
}
if (!p) return(0);
s=(LinkString) malloc(sizeof(Node));
printf("New Line(%d):",n1);gets(str);
for(k=0;str[k]!='\0';k++)
s->ch[k]=str[k];
s->ch[k++]=10;
s->ch[k]='\0';
s->next=p->next;
p->next=s;
return(1);
}
void main(int argc,char *argv[])
{
char sel[50],string[80];
int n1,n2,cur_line=0,flag=0;
L=(LinkString)malloc(sizeof(Node));
L->next=NULL;/*生成头结点*/
// strcpy(string,argv[1]);
/*打开文件*/
if (argc>=2) loadfile(string);
else {
printf("Input FileName:");
scanf("%s",string);
getchar();
loadfile(string);
}
/*从键盘接受一个字符串,转换为命令和参数*/
while (1) {
printf(">>");
/*gets(sel);*/
fflush(stdin);
scanf("%s",sel);
getnum(sel,&n1,&n2,cur_line);/*将接受的字符串转换为参数n1,n2*/
switch(sel[0]) {/*分别调用函数完成相应功能*/
case 'S':
case 's': flag=1;savefile(string);break;
case 'Q':
case 'q': flag=1;break;
case 'L':
case 'l': display(n1,n2);break;
case 'D':
case 'd': deletechar(n1,n2);display(0,10);break;
case 'I':
case 'i': insert(n1);break;
case 'E':
case 'e': edit(n1);break;
}
if (flag) break;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
数据结构(严版)代码算法C实现
共493个文件
txt:104个
h:102个
rar:81个
5星 · 超过95%的资源 需积分: 20 75 下载量 184 浏览量
2010-09-02
23:39:14
上传
评论 1
收藏 1.99MB RAR 举报
温馨提示
算法C实现模板 数据结构的学习既要有很强的理论性还要有较强的实践性。书中算法描述采用的都是标准的Turbo C函数。当需要在计算机上完整地实现算法时,必须设计构造一个完整的可以执行的源程序。为此给出C语言实现算法的模板。 模板的基本结构如下: ⑴ 包含必要的标准头文件,如标准的输入输出头文件"stdio.h",同时给出必要的符号常量宏定义; ⑵ 将某一数据结构所对应的类型定义存放在一个头文件当中,将某一数据结构所对应的基本操作算法存放在一个分类的.c文件当中.如:可以将单链表的有关类型定义存放在linklist.h中,将单链表的基本操作算法存放在linklist.c中,之后通过文件包含#include "linklist.h" 和#include "linklist.c",以实现对有关数据类型的引用及有关操作函数的调用; ⑶ 编写基于某种数据结构的具体问题的算法; ⑷ 编写主函数,其中进行合理的函数调用,形成一个可执行程序。
资源推荐
资源详情
资源评论
收起资源包目录
数据结构(严版)代码算法C实现 (493个子文件)
car.c 8KB
3.13.c 2KB
7.15.c 1KB
5.4.c 1KB
ma.c 1KB
7.10.c 1KB
7.1.c 1KB
3.12.c 1KB
kuohaopipei.c 1KB
kuohaopipei.c 1KB
7.2.c 987B
7.14.c 985B
doctor.c 946B
7.13.c 939B
5.3.c 891B
7.16.c 842B
3.24.c 838B
yanghuisanjiao.c 837B
7.9.c 814B
7.11.c 779B
5.2.c 722B
汉诺塔.c 597B
汉诺塔.c 597B
7.8.c 533B
3.25.c 505B
7.7.c 461B
5.10.c 457B
3.14.c 430B
3.15.c 426B
7.3.c 415B
3.20.c 395B
3.16.c 370B
5.9-1.c 367B
5.8.c 366B
7.4.c 364B
3.7.c 362B
3.19.c 349B
3.6.c 335B
7.12.c 330B
3.10.c 326B
3.8.c 320B
3.11.c 307B
5.9-2.c 300B
7.6.c 295B
3.9.c 285B
5.1.c 278B
7.5.c 268B
3.1.c 266B
5.7.c 265B
3.2.c 263B
3.23.c 263B
3.18.c 260B
3.22.c 256B
3.3.c 251B
3.4.c 211B
5.5.c 192B
5.6.c 189B
3.17.c 152B
3.21.c 96B
huffman.cpp 3KB
radixsort.cpp 3KB
thread.cpp 3KB
polyadd.cpp 3KB
linkstrindex.cpp 3KB
lstrindex.cpp 2KB
printtree.cpp 2KB
heapstr.cpp 2KB
layerorder.cpp 2KB
BiTree.cpp 2KB
polyadd.cpp 2KB
heapsort.cpp 2KB
qksort.cpp 2KB
merge.cpp 2KB
ReverseList.cpp 2KB
strindex.cpp 2KB
StrInsert.cpp 1KB
merge.cpp 1KB
shellinsert.cpp 1KB
LinkInsList.cpp 1KB
inorder.cpp 1KB
binsort.cpp 1KB
LinkDelList.cpp 1KB
InsList.cpp 1KB
bubblesort.cpp 1KB
inssort.cpp 976B
CreatFromHead.cpp 961B
AdjustSqlist.cpp 941B
postorder.cpp 941B
selectsort.cpp 938B
CreateFromTail.cpp 918B
strcat.cpp 908B
DelList.cpp 878B
BinAdd.cpp 854B
BinAdd.cpp 854B
Get.cpp 841B
substring.cpp 830B
leaf.cpp 810B
Locate.cpp 791B
strdelete.cpp 784B
LinkLocate.cpp 779B
共 493 条
- 1
- 2
- 3
- 4
- 5
资源评论
- HanBert2016-10-05代码还不错,有参考价值
- lixin4792200912015-05-29程序员的入门必学、、、谢谢啦
- 小楼吹彻玉笙寒2014-10-22代码很全面,运行也没什么问题,感谢分享
- 垨望2014-06-05配合教材的代码示例,程序员的入门必学
xupj
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- stm32 usb接口通信
- Chessmate是一款完全免费的国际象棋学习软件,支持引擎分析,学开局、残局、棋书解读、大数据分析等功能
- 总结整理的Android面试Java基础知识点面试资料精编汇总文档资料合集.zip
- .android_lq
- FDN5632N-VB一款SOT23封装N-Channel场效应MOS管
- 毛老板-2404250902.amr
- Java类加载流程(双亲委派)流程图.zip
- FDN5632-NL-VB一款SOT23封装N-Channel场效应MOS管
- 新目标大学英语(第二版)视听说教程 第1册 Unit 4 TOP课件.zip
- 自动驾驶-状态估计和定位之Error State EKF.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功