数据结构老师给的源码有bug,哪位大神有火影黄动画帮我看看

求大神帮我看看这个网上下的c语言写的贪吃蛇源代码,我实在看不懂,要发狂了。(这是一开始的部分)_百度知道数据结构简单算法源代码(自己写的 希望不要吐槽)_数据结构吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:38,244贴子:
数据结构简单算法源代码(自己写的 希望不要吐槽)收藏
看到微book的贴子
觉得大家学得好像都。。。
自己也在学数据结构
自己写码了一些代码
给大家看一下
有的程序写得不够详细
写得不好希望大家不要吐槽
有问题或者建议可以跟我联系
希望大家共同进步
由于附件不能添加那么多我就在楼下贴出来了
数据存储,亚马逊AWS-提供可调容量,静态KMS加密,轻松部署.按需购买!免费试用!
单链表:#include&stdio.h&#include&malloc.h&#include&windows.h&typedef struct LNode
//定义单链表存储类型{
struct LNode *}void creatlistf(linklist *&L )
//建立链表(头插法){
linklist *s;
elemtype a[10];
printf("请输入10个数:\n");
for(i=0;i&10;i++)
scanf("%d",&a[i]);
L=(linklist *)malloc(sizeof(linklist));
L-&next=NULL;
for(i=0;i&10;i++)
s=(linklist *)malloc(sizeof(linklist));
s-&data=a[i];
s-&next=L-&
L-&next=s;
}}void creatlistr(linklist *&L)
//建立链表(尾插法){
linklist *s,*r;
elemtype a[10];
printf("请输入10个数:\n");
for(i=0;i&10;i++)
scanf("%d",&a[i]);
L=(linklist *)malloc(sizeof(linklist));
for(i=0;i&10;i++)
s=(linklist *)malloc(sizeof(linklist));
s-&data=a[i];
r-&next=s;
r-&next=NULL;}void displist(linklist *L)
//输出单链表{
linklist *s;
while(s!=NULL)
%d",s-&data);
printf("\n");}void listempty(linklist *L)
//判断是否为空{
if(L-&next!=NULL)
printf("链表不为空\n");
printf("链表为空\n");}void listlength(linklist *L)
//求链表的长度{
linklist *p=L;
while(p-&next!=NULL)
printf("长度为%d\n",n);}void getelem(linklist *L)
int m,i=0;
linklist *p=L;
printf("请输入取出元素位置 ");
scanf("%d",&m);
while(i&m&&p!=NULL)
if(p==NULL)
printf("error\n");
printf("取值成功 第%d位的元素为 %d\n",m,p-&data);}void locateelem(linklist *L)
//按值查找{
int m,i=0;
linklist *p=L;
printf("请输入需查找元素值 ");
scanf("%d",&m);
while(p!=NULL&&p-&data!=m)
if(p==NULL)
printf("error\n");
printf("元素%d在第%d位\n",m,i);}void listinsert(linklist *L)
//插入元素{
int i=0,j,m;
linklist *s,*p;
printf("请输入插入位置:");
scanf("%d",&j);
printf("请输入需插入元素:");
scanf("%d",&m);
while(i&j-1 && s!=NULL)
if(s==NULL)
printf("输入错误!\n");
p=(linklist *)malloc(sizeof(linklist));
p-&data=m;
p-&next=s-&
s-&next=p;
}}void listdelete(linklist *&L)
//删除元素{
int i,j=0,e;
printf("请输入需删除第几个元素:");
scanf("%d",&i);
linklist *s,*q;
while(j&i-1&&s!=NULL)
if(s==NULL)
printf("输入错误!\n");
if(q!=NULL)
s-&next=q-&
printf("成功删除元素%d\n",e);
printf("输入错误!\n");
}}void destroylist(linklist *&L)
//销毁链表{
getchar();
printf("确定要销毁链表请输入y否则不销毁: ");
scanf("%c",&t);
if(t=='y')
linklist *p=L,*q;
while(q!=NULL)
printf("链表已销毁\n");
续单链表:void main(){
***************欢迎使用单链表基本运算系统********************\n");
****************如有问题请与本人联系**************************\n");
linklist *p;
printf("建表方法:1头插法建表, 2尾插法建表\n");
printf("请输入建表方法:");
scanf("%d",&n);
creatlistf(p);
//调用头插法建表函数
else if(n==2)
creatlistr(p);
//调用尾插法建表函数
printf("error\n");
printf("链表已建立完毕\n");
printf("请选择:");
printf(" 1.输出链表\n");
2.判断线性表(单链表)是否为空\n");
3.求线性表(单链表)的长度\n");
4.从线性表(单链表)中取值\n");
5.在线性表(单链表)中查找元素\n");
6.插入元素\n");
7.删除元素\n");
8.销毁链表\n");
9.退出\n");
scanf("%d",&m);
case 1:displist(p);
case 2:listempty(p);
case 3:listlength(p);
case 4:getelem(p);
case 5:locateelem(p);
case 6:listinsert(p);
case 7:listdelete(p);
case 8:destroylist(p);
case 9:exit(0);
default:printf("输入错误,请重新输入\n");
顺序表://*顺序表的建立与输出*//#include&stdio.h&#include&malloc.h&#include&windows.h&#define maxsize 50typedef struct
//定义顺序表的存储类型{
elemtype data[maxsize];}void createlist(sqlist *&L,elemtype a[],int n)//建立顺序表{
L=(sqlist *)malloc(sizeof(sqlist));
for(i=0;i&n;i++)
L-&data[i]=a[i];
L-&length=n;}void displist(sqlist *L)
//输出顺序表{
for(i=0;i&L-&i++)
printf("%d
",L-&data[i]);
printf("\n");}void listempty(sqlist *L)
//判断线性表是否为空{
printf("此线性表不为空\n");
printf("此为空线性表\n");}void listlength(sqlist *L)
//求线性表的长度{
printf("此线性表的长度为: %d\n",m);}void getelem(sqlist *L)
//从顺序表中取值{
printf("请输入需取第几位元素: ");
scanf("%d",&i);
if(i&1||i&L-&length)
printf("输入错误");
e=L-&data[i-1];
printf("取值成功第%d位元素为:%d\n",i,e);
}}void locateelem(sqlist *L)
//在顺序表中查找元素{
int e,i=0;
printf("请输入需查找元素:");
scanf("%d",&e);
while(i&L-&length&&L-&data[i]!=e)
if(i&=L-&length)
printf("不存在此元素\n");
printf("此元素在第%d位\n",i+1);}void listinsert(sqlist *&L)
//插入元素
int i,j,e;
printf("请输入插入位置:");
scanf("%d",&i);
if(i&1||i&L-&length+1)
printf("输入错误\n");
printf("请输入需插入元素:");
scanf("%d",&e);
for(j=L-&j&i;j--)
L-&data[j]=L-&data[j-1];
L-&data[i]=e;
L-&length++;
printf("插入成功\n");
}}void listdelete(sqlist *&L)
//删除元素{
int i,j,e;
printf("请输入需删除元素位置:");
scanf("%d",&i);
if(i&1||i&L-&length+1)
printf("输入错误\n");
e=L-&data[i];
for(j=i+1;j&L-&j++)
L-&data[j-1]=L-&data[j];
L-&length--;
printf("已删除%d元素\n",e);
}}void main(){
***************欢迎使用顺序表基本运算系统********************\n");
*************如有问题请与本人联系**********************\n");
sqlist *q;
int i,m,n=10,a[10];
printf("请输入10个数组元素:\n");
for(i=0;i&10;i++)
scanf("%d",&a[i]);
createlist(q,a,n);
printf("顺序表建立完毕\n");
printf("请选择:");
printf(" 1.输出链表\n");
2.判断线性表是否为空\n");
3.求线性表的长度\n");
4.从顺序表中取值\n");
5.在顺序表中查找元素\n");
6.插入元素\n");
7.删除元素\n");
8.退出\n");
scanf("%d",&m);
case 1:displist(q);
case 2:listempty(q);
case 3:listlength(q);
case 4:getelem(q);
case 5:locateelem(q);
case 6:listinsert(q);
case 7:listdelete(q);
case 8:exit(0);
default:printf("输入错误\n");
双链表:#include&stdio.h&#include&malloc.h&#include&windows.h&typedef struct dnode{
struct dnode *
struct dnode *}void createlistf(dlinklist *&L,elemtype a[],int n)
//建立双链表(头插法){
dlinklist *s;
L=(dlinklist *)malloc(sizeof(dlinklist));
L-&prior=L-&next=NULL;
for(i=0;i&n;i++)
s=(dlinklist *)malloc(sizeof(dlinklist));
s-&data=a[i];
s-&next=L-&
if(L-&next!=NULL)
L-&next-&prior=s;
L-&next=s;
s-&prior=L;
}}void creatlistr(dlinklist *&L,elemtype a[],int n)
//尾插法建表{
dlinklist *s,*p;
L=(dlinklist *)malloc(sizeof(dlinklist));
L-&prior=L-&next=NULL;
for(i=0;i&n;i++)
s=(dlinklist *)malloc(sizeof(dlinklist));
s-&data=a[i];
s-&next=p-&
p-&next=s;
s-&prior=p;
}}void listempty(dlinklist *L)
//判断是否为空{
if(L-&next!=NULL)
printf("链表不为空\n");
printf("链表为空\n");}int listlength(dlinklist *L)
//求链表长度{
dlinklist *p=L;
while(p!=NULL)
return i-1;}void listinsert(dlinklist *&L)
//插入元素{
dlinklist *p=L,*s;
int i,m,a;
printf("请输入需插入元素");
scanf("%d",&a);
printf("请输入需插入元素位置");
scanf("%d",&m);
if(m&0||m&listlength(L))
printf("输入错误\n");
for(i=0;i&m-1;i++)
s=(dlinklist *)malloc(sizeof(dlinklist));
s-&data=a;
s-&next=p-&
s-&next-&prior=s;
p-&next=s;
s-&prior=p;
printf("插入成功\n");
}}void listdelete(dlinklist *&L)
//删除元素{
dlinklist *p=L,*q;
int i,m,t;
printf("请输入需删除元素位置 ");
scanf("%d",&m);
if(m&0||m&listlength(L))
printf("输入错误\n");
for(i=0;i&m-1;i++)
p-&next=q-&
q-&next-&prior=p;
printf("成功删除元素%d\n",t);
}}void getelem(dlinklist *L)
dlinklist *p=L;
int i=0,m;
printf("请输入取值元素 ");
scanf("%d",&m);
while(p!=NULL)
if(p-&data==m)
printf("取值成功 %d元素在第%d位\n",m,i);
if(p=NULL)
printf("没有此元素\n");}void locateelem(dlinklist *L)
dlinklist *p=L;
int i=0,m;
printf("请输入需查找位置 ");
scanf("%d",&m);
if(m&=0||m&listlength(L))
printf("输入错误\n");
for(;i&m;i++)
printf("第%d位的元素为%d\n",m,p-&data);
}}void destroylist(dlinklist *&L)
//销毁链表{
dlinklist *p=L,*q;
getchar();
printf("确认要销毁链表请输入y否则不销毁 请输入:");
scanf("%c",&m);
if(m=='y')
while(q!=NULL)
printf("链表已销毁\n");
printf("链表未销毁\n");}void displist(dlinklist *L)
//输出双链表{
dlinklist *s;
while(s!=NULL)
%d",s-&data);
printf("\n");}
续 双链表:void main(){
****************欢迎使用双链表基本运算系统****************\n");
****************如有问题欢迎和我联系*****************\n");
dlinklist *p;
int a[5],i,m,t;
printf("请选择建表方式 1用头插法建表,2用尾插法建表 ");
scanf("%d",&t);
printf("请输入5个数\n");
for(i=0;i&5;i++)
scanf("%d",&a[i]);
createlistf(p,a,5);
else if(t==2)
creatlistr(p,a,5);
printf("输入错误!");
printf("双链表建立完毕\n");
printf("请选择:");
printf(" 1.输出链表\n");
2.判断线性表(双链表)是否为空\n");
3.求线性表(双链表)的长度\n");
4.从线性表(双链表)中取值\n");
5.在线性表(双链表)中查找元素\n");
6.插入元素\n");
7.删除元素\n");
8.销毁链表\n");
9.退出\n");
scanf("%d",&m);
case 1:displist(p);
case 2:listempty(p);
printf("链表长为:%d\n",listlength(p));
case 4:getelem(p);
case 5:locateelem(p);
case 6:listinsert(p);
case 7:listdelete(p);
case 8:destroylist(p);
case 9:exit(0);
default:printf("输入错误,请重新输入\n");
栈的顺序存储:#include&stdio.h&#include&windows.h&#include&malloc.h&#define maxsize 50typedef struct
elemtype data[maxsize];}void initstack(sqstack *&s)
s=(sqstack *)malloc(sizeof(sqstack));
s-&top=-1;}void push(sqstack *&s)
getchar();
printf("请输入需进栈的元素:");
scanf("%c",&e);
if(s-&top&maxsize-1)
printf("栈满,错误!\n");
s-&data[s-&top]=e;
printf("进栈成功\n");
}}void gettop(sqstack *s)
//取栈顶元素{
if(s-&top==-1)
printf("栈空,取值失败!\n");
t=s-&data[s-&top];
printf("取值成功,栈顶元素为:%c\n",t);
}}void stackempty(sqstack *s)
//判断栈是否为空{
if(s-&top==-1)
printf("栈为空\n");
printf("栈不为空\n");}void pop(sqstack *&s)
if(s-&top==-1)
printf("栈为空,出栈失败\n");
e=s-&data[s-&top];
printf("出栈成功,出栈元素为:%c\n",e);
length(sqstack *s)
if(s-&top==-1)
return(-1);
return(s-&top+1);}void destroy(sqstack *&s)
getchar();
printf("确定要销毁栈请输入y 否则不销毁:");
scanf("%c",&t);
if(t=='y')
printf("销毁成功\n");
printf("栈未销毁\n");}void output(sqstack *s){
int m,n=s-&
m=length(s)+1;
if(s-&top==-1)
printf("栈为空\n");
printf("出栈序列为:");
for(;m&0;m--)
printf(" %c",s-&data[s-&top]);
printf("\n");
}}void main(){
sqstack *s;
************欢迎使用顺序栈运算系统*************\n");
initstack(s);
printf("请选择:");
printf(" 1 进栈\n");
2 判断栈是否为空\n");
3 取栈顶元素\n");
4 出栈\n");
5 销毁栈\n");
6 求栈的长度\n");
7 输出出栈序列\n");
8 退出\n");
scanf("%d",&m);
case 1:push(s);
case 2:stackempty(s);
case 3:gettop(s);
case 4:pop(s);
case 5:destroy(s);
case 6:printf("栈的长度为%d\n",length(s));
case 7:output(s);
case 8:exit(0);
default:printf("输入错误,请重新输入\n");
栈的链式存储:#include&stdio.h&#include&windows.h&#include&malloc.h&typedef struct linknode
//链表的定义{
struct linknode *}void initstack(listack *&s)
s=(listack *)malloc(sizeof(listack));
s-&next=NULL;}void push(listack *s)
listack *p;
printf("请输入进栈元素:");
scanf("%d",&e);
p=(listack *)malloc(sizeof(listack));
p-&data=e;
p-&next=s-&
s-&next=p;
printf("进栈成功\n");}void gettop(listack *s)
//取栈顶元素{
if(s-&next==NULL)
printf("栈空,取值失败!\n");
t=s-&next-&
printf("取值成功,栈顶元素为:%d\n",t);
}}void stackempty(listack *s)
//判断链栈是否为空{
if(s-&next==NULL)
printf("栈为空\n");
printf("栈不为空\n");}void pop(listack *&s)
listack *p;
if(s-&next!=NULL)
s-&next=p-&
printf("出栈成功,栈顶元素为:%d\n",e);
printf("栈为空,出栈失败\n");}void destroy(listack *&s){
listack *p=s,*q=s-&
getchar();
printf("确定要销毁栈,请输入y 否则不销毁!\n");
scanf("%c",&m);
if(m=='y')
while(q!=NULL)
printf("销毁成功!\n");
printf("链栈未销毁!\n");}void main(){
listack *s;
******************欢迎使用**********************\n");
initstack(s);
printf("请选择:");
printf(" 1 进栈\n");
2 判断栈是否为空\n");
3 取栈顶元素\n");
4 出栈\n");
5 销毁栈\n");
6 退出\n");
scanf("%d",&m);
case 1:push(s);
case 2:stackempty(s);
case 3:gettop(s);
case 4:pop(s);
case 5:destroy(s);
case 6:exit(0);
default:printf("输入错误,请重新输入\n");
mark没事过来参考参考
数据服务器,天猫电器城,品牌直营,速度挑战&阿法狗&,高性能让你&脑洞大开&!天猫电器城,品牌旗舰,闪电到家,超值包邮,智新生活!
没有树和图的嘛?
写得很好很清晰,我就用这个作为例题学习了,希望楼主可以继续更新!
继续更新吧
都是自己写的
希望不要秒沉啊
为了方便找程序
我顺序更新(按书上的章节)
至于有实在等不及的可以单独
队列的顺序存储:#include&stdio.h&#include&windows.h&#include&malloc.h&#define maxsize 100ttypedef struct
//队列的定义{elemtype data[maxsize];int front,}void initqueue(sqqueue *&q)
//队列的初始化{q=(sqqueue *)malloc(sizeof(sqqueue));q-&front=q-&rear=-1;}void enqueue(sqqueue *q)
//进队{getchar();printf("请输入需进队元素:");scanf("%c",&e);if(q-&rear==maxsize-1)printf("队满,进队失败!\n");else{q-&rear++;q-&data[q-&rear]=e;printf("进队成功\n");}}void queueempty(sqqueue *q)
//判断队列是否为空{if(q-&rear==q-&front)printf("队列为空!\n");elseprintf("队列不为空!\n");}void dequeue(sqqueue *q)
//出队{if(q-&rear==q-&front)printf("队空,出队失败!\n");else{q-&front++;m=q-&data[q-&front];printf("出队元素为:%c\n",m);}}void destroy(sqqueue *q)
//销毁队列{getchar();printf("确定要销毁队列请输入y 否则不销毁!\n");scanf("%c",&m);if(m=='y'){free(q);printf("队列已销毁!\n");exit(0);}elseprintf("队列未销毁!\n");}int
length(sqqueue *q)
//求队列的长度{int n=q-&rear-q-&}void main(){sqqueue *q;printf("
*************欢迎使用队列的运算系统****************\n");initqueue(q);while(1){printf("请选择:");printf("1 进队\n");printf("
2 出队\n");printf("
3 判断队列是否为空\n");printf("
4 销毁队列\n");printf("
5 求队列的长度\n");printf("
6 退出\n");scanf("%d",&m);switch(m){case 1:enqueue(q);case 2:dequeue(q);case 3:queueempty(q);case 4:destroy(q);case 5:printf("队列的长度为:%d\n",length(q));case 6:exit(0);default:printf("输入错误,请从新输入!\n");}}}
程序有的排列不整齐
是因为我用了制表符 不是用的空格 所以有点乱
队列的链式存储:#include&stdio.h&#include&malloc.h&#include&windows.h&typedef struct qnode
//数据节点的定义{struct qnode *}typedef struct
//链队的定义{qnode *qnode *}void initqueue(liqueue *&q)
//初始化{q=(liqueue *)malloc(sizeof(liqueue));q-&front=q-&rear=NULL;}void enqueue(liqueue *q)
//进队{qnode *p;p=(qnode *)malloc(sizeof(qnode));printf("请输入需进队元素:");scanf("%d",&e);p-&data=e;p-&next=NULL;if(q-&rear==NULL){q-&front=q-&rear=p;printf("进队成功!\n");}else{q-&rear-&next=p;q-&rear=p;printf("进队成功!\n");}}void queueempty(liqueue *q)
//判断队列是否为空{if(q-&rear==NULL)printf("队列为空!\n");elseprintf("队列不为空!\n");}void dequeue(liqueue *&q)
//出队列{qnode *t;if(q-&rear==NULL)printf("队列为空,出队失败!\n");else{t=q-&e=t-&if(q-&front==q-&rear)q-&front=q-&rear=NULL;elseq-&front=q-&front-&free(t);printf("元素%d出队列成功!\n",e); }}void destroyqueue(liqueue *q)
//销毁链队{qnode *p=q-&front,*r;getchar();printf("确定要销毁链队请输入y,否则不销毁!\n");scanf("%c",&t);if(t=='y'){if(p!=NULL){r=p-&while(r!=NULL){free(p);p=r;r=p-&}}free(p);free(q);printf("销毁成功\n");exit(0);}elseprintf("链队未销毁!\n");}void main(){liqueue *q;printf("
***************欢迎使用链队的运算系统******************\n");initqueue(q);while(1){printf("请选择:");printf("1 进队列\n");printf("
2 出队列\n");printf("
3 判断队列是否为空\n");printf("
4 销毁链队\n");printf("
5 退出\n");scanf("%d",&m);switch(m){case 1:enqueue(q);case 2:dequeue(q);case 3:queueempty(q);case 4:destroyqueue(q);case 5:exit(0);default:printf("输入错误请重新输入!\n");}}}
链串当时丢掉了只写了一般
要是有人要的话
链串就跳过了 木有问题吧
不过我写了顺序串
链串可以在这个上改进的顺序串:#include&stdio.h&#include&windows.h&#define maxsize 100typedef struct
//非紧缩格式的顺序串的定义{char data[maxsize];}void strassign(sqstring &s)
//将字符串复制给串{char a[100];getchar();printf("请输入一个字符串:");gets(a);for(i=0;a[i]!='\0';i++)s.data[i]=a[i];s.length=i;}void dispstr(sqstring s)
//输出串的所有元素{if(s.length&=0)printf("串为空,输出失败!\n");else{if(s.length&0){for(i=0;i&s.i++)printf("
%c",s.data[i]);}printf("\n");}}void strcopy(sqstring &s,sqstring t)
//串与串的复制{for(i=0;i&t.i++)s.data[i]=t.data[i];s.length=t.}int strequal(sqstring s)
//判断串相等{strassign(t);int i,m=1;if(s.length!=t.length)m=0;elsefor(i=0;i&s.i++)if(s.data[i]!=t.data[i])m=0;if(m==1)printf("串相等\n");elseprintf("串不相等\n");}void strlength(sqstring s)
//求串长{printf("s.length=%d\n",s.length);}sqstring concate(sqstring s)
//串的连接{sqstring t,strassign(t);int i,j;if(s.length==0)str.length=0;else{str.length=s.length+t.for(i=0;i&s.i++)str.data[i]=s.data[i];for(i=0;i&t.i++)str.data[s.length+i]=t.data[i];}}void substr(sqstring s)
//求子串{int i,j,k;printf("请输入第i个字符开始的连续j个字符组成的子串的i、j值\n");printf("i=");scanf("%d",&i);printf("j=");scanf("%d",&j);if(s.length==0)printf("串为空!\n");else if(i&=0||i&s.length||j&0||i+j-1&s.length)printf("输入错误!\n");else{str.length=j;for(k=i-1;j&0;j--,k++)str.data[k-i+1]=s.data[k];printf("所求子串为:");dispstr(str);}}void insstr(sqstring &s)
//将串s2插到串s的第i个字符中{sqstring s2,int i,j;str.length=0;strassign(s2);printf("请输入需把串插入的位置:");scanf("%d",&i);if(i&0||i&s.length+1)printf("输入错误!\n");else{for(j=0;j&i-1;j++)str.data[j]=s.data[j];for(j=0;j&s2.j++)str.data[j+i-1]=s2.data[j];for(j=i-1;j&s.j++)str.data[j+s2.length]=s.data[j];str.length=s.length+s2.strcopy(s,str);printf("插入后的串为:");dispstr(s);}}void delstr(sqstring &s)
//从串s中删去第i个字符开始的长度为j的子串{int i,j,k;printf("删除第i个字符开始的长度为j的子串\n");printf("i=");scanf("%d",&i);printf("j=");scanf("%d",&j);if(s.length==0)printf("串为空!\n");else if(i&=0||i&s.length||i+j-1&s.length)printf("输入错误!\n");else{k=j;for(;j&=0;j--,i++)s.data[i-1]=s.data[i+k-1];s.length=s.length-k;printf("删除后的串为: ");
dispstr(s);}}void repstr(sqstring &s)
//将第i个字符开始的j个字符够成的子串用串t替换{sqstring t,int i,j,k;printf("s串中将第i个字符开始的j个字符够成的子串用串t替换\n");printf("i=");scanf("%d",&i);printf(" j=");scanf("%d",&j);strassign(t);if(i&0||i&s.length||i+j-1&s.length)printf("输入错误!\n");else{str.length=0;for(k=0;k&i-1;k++)str.data[k]=s.data[k];for(k=0;k&t.k++)str.data[k+i-1]=t.data[k];for(k=i+j-1;k&s.k++)str.data[k-j+t.length]=s.data[k];str.length=s.length+t.length-j;strcopy(s,str);printf("替换后的串为:");dispstr(s);}}void index(sqstring s,sqstring t)
//串的模式匹配(bf算法){int i=0,j=0;while (i&s.length && j&t.length) {if (s.data[i]==t.data[j]){i++;j++;
}else{i=i-j+1;j=0; }}if (j&=t.length)
printf("匹配成功在第%d位\n\n",i-t.length+1);else
printf("匹配不成功!\n");}void main(){sqstring s,t;printf("
******************欢迎使用顺序串的运算系统*************\n");while(1){printf("请选择:");printf("1 将字符串复制给串s\n");printf("
2 串与串的复制\n");printf("
3 判断串相等\n");printf("
4 求串的长度\n");printf("
5 串的连接\n");printf("
6 求子串\n");printf("
7 将串s2插到串s的第i个字符位置\n");printf("
8 从串s中删去从第i个字符开始的长度为j的子串\n");printf("
9 将第i个字符开始的j个字符够成的子串用串t替换\n");printf("
10 串的模式匹配\n");printf("
11 输出串的所有元素\n");printf("
12 退出\n");scanf("%d",&m);switch(m){case 1:strassign(s);
printf("复制成功\n");case 2:strassign(t);
strcopy(s,t);
printf("复制成功\n");case 3:strequal(s);case 4:strlength(s);case 5:dispstr(concate(s));case 6:substr(s);case 7:insstr(s);case 8:delstr(s);case 9:repstr(s);case 10:strassign(t);index(s,t);case 11:printf("s:
");dispstr(s);case 12:printf("谢谢使用!\n");exit(0);default:printf("输入错误!\n");}}}
接下来的下次再更吧
我这要断网了
希望看帖的留下脚印啊
楼主加油,我们学到AOV啦
void initstack(sqstack *&s) //初始化其中*&是什么意思啊?
哇哦哦哦哦哦哦
为什么switch语句那老是报错???我是新手,楼主指点一下哈
期待楼主继续更新啊!
稀疏矩阵:#include&stdio.h&#include&windows.h&#define m 3
//行数#define n 2
//列数#define maxsize 50typedef struct {}typedef struct {
tupnode data[maxsize];}void creatmat(tsmatrix &t,elemtype a[m][n]) //稀疏矩阵创建三元组表示{
t.rows=m;t.cols=n;t.nums=0;
for(i=0;i&m;i++)
for(j=0;j&n;j++)
if(a[i][j]!=0)
t.data[t.nums].r=i;
t.data[t.nums].c=j;
t.data[t.nums].d=a[i][j];
}}int value(tsmatrix &t,elemtype x,int i,int j)
//三元组元素赋值{
int k=0,k1;
if(i&=t.rows||j&=t.cols)
while(k&t.nums&&i&t.data[k].r)
while (k&t.nums&&i==t.data[k].r&&j&t.data[k].c)
if(t.data[k].r==i&&t.data[k].c==j)
t.data[k].d=x;
for(k1=t.nums-1;k1&=k;k1--)
t.data[k1+1].r=t.data[k1].r;
t.data[k1+1].c=t.data[k1].c;
t.data[k1+1].d=t.data[k1].d;
t.data[k].r=i;
t.data[k].c=j;
t.data[k].d=x;
return 1;}int assign(tsmatrix t,elemtype &x,int i,int j)
//将指定位置的元素值赋给变量{
if(i&=t.rows||j&=t.cols)
while (k&t.nums&&i&t.data[k].r)
while (k&t.nums&&i==t.data[k].r&&j&t.data[k].c)
if(t.data[k].r==i&&t.data[k].c==j)
x=t.data[k].d;
return 1;}void dispmat(tsmatrix t)
//输出三元组{
if(t.nums&=0)
printf("\t%d\t%d\t%d\n",t.rows,t.cols,t.nums);
printf("\t------------------\n");
for(i=0;i&t.i++)
printf("\t%d\t%d\t%d\n",t.data[i].r,t.data[i].c,t.data[i].d);}void trantat(tsmatrix t,tsmatrix &tb)
//矩阵转置{
int p,q=0,v;
tb.rows=t.
tb.cols=t.
tb.nums=t.
if(t.nums!=0)
for(v=0;v&t.v++)
for(p=0;p&t.p++)
if(t.data[p].c==v)
tb.data[q].r=t.data[p].c;
tb.data[p].c=t.data[p].r;
tb.data[q].d=t.data[p].d;
printf("转置后的三元组为:\n");
dispmat(tb);}void main(){
tsmatrix t,
elemtype a[3][2],x;
int i,j,w,g,h;
*************欢迎使用稀疏矩阵基本运算系统****************\n");
printf("请输入%d个数\n",m*n);
for(i=0;i&m;i++)
for(j=0;j&n;j++)
scanf("%d",&a[i][j]);
creatmat(t,a);
printf("请选择:");
printf("1 三元组元素赋值\n");
2 将指定位置的元素值赋给变量\n");
3 矩阵转置\n");
4 输出三元组\n");
5 退出\n");
scanf("%d",&w);
case 1:printf("请输入所赋值:");
scanf("%d",&x);
printf("\n请输入插入第几行:");
scanf("%d",&g);
printf("\n请输入插入第几列:");
scanf("%d",&h);
if(value(t,x,g,h))
printf("赋值成功\n");
printf("赋值失败\n");
case 2:printf("\n请需取元素所在行:");
scanf("%d",&g);
printf("\n请输入需取元素所在列:");
scanf("%d",&h);
if(assign(t,x,g,h))
printf("取值成功,元素为:%d\n",x);
printf("取值失败\n");
case 3:trantat(t,tb);
case 4:dispmat(t);
case 5:exit(0);
default:printf("输入错误!\n");
广义表:#include&stdio.h&#include&malloc.h&#include&windows.h&ttypedef struct lnode
//广义表的定义{
struct lnode *
struct lnode *}glnode *creategl(char *&s)
//建立广义表的链式存储结构{
glnode *g;
char ch=*s++;
if(ch!='\0')
g=(glnode *)malloc(sizeof(glnode));
if(ch=='(')
g-&val.sublist=creategl(s);
else if(ch==')')
else if(ch=='#')
g-&val.data=
if(g!=NULL)
if(ch==',')
g-&link=creategl(s);
g-&link=NULL;}int gllength(glnode *g)
//求广义表的长度{
glnode *g1;
g1=g-&val.
while(g1!=NULL)
}}int gldepth(glnode *g)
//求广义表的深度{
glnode *g1;
int max=0,
if(g-&tag==0)
g1=g-&val.
if(g1==NULL)
while(g1-NULL)
if(g1-&tag==1)
dep=gldepth(g1);
if(dep&max)
return(max+1);}elemtype maxatom(glnode *g)
//求广义表中的最大原子{
elemtype max1,max2;
if(g!=NULL)
if(g-&tag==0)
max1=maxatom(g-&link);
return(g-&val.data&max1?g-&val.data:max1);
max1=maxatom(g-&val.sublist);
max2=maxatom(g-&link);
return(max1&max2?max1:max2);
return 0;}void dispgl(glnode *g)
//输出广义表{
if(g!=NULL)
if(g-&tag==0)
printf("%c",g-&val.data);
printf("(");
if(g-&val.sublist==NULL)
printf("#");
dispgl(g-&val.sublist);
printf(")");
if(g-&link!=NULL)
printf(",");
dispgl(g-&link);
}}void main(){
glnode *g;
char a[100],*p=a;
*************欢迎使用广义表的运算系统****************\n");
printf("请输入一个广义表:(例如(b,(b,a,(#),d),((a,b),c,((#)))))\n");
g=creategl(p);
printf("广义表已建好\n");
printf("请选择:");
printf(" 1求广义表的长度\n");
2求广义表的深度\n");
3输出广义表\n");
4求广义表中的最大原子\n");
5退出\n");
scanf("%d",&m);
case 1:printf("广义表的长度为:%d\n",gllength(g));
case 2:printf("广义表的深度为:%d\n",gldepth(g));
case 3:printf("广义表为:");dispgl(g);printf("\n");
case 4:printf("广义表中的最大原子为:%c\n",maxatom(g));
case 5:exit(0);
default:printf("输入错误\n");
看了以上代码的吧友们
留个小作业吧
是我们老师很早之前给我们做的
有空的话可以想一下下次更新时我会把答案一起贴上来的题目:只用一个指针删除单链表的当前元素 。
记住只用一个指针哦!还有一道若一个线性表L采用顺序存储结构存储,其中所有元素为整数。设计一个算法,删除元素值在[x.y]之间的所有元素。
这个只写算法吧 省得麻烦
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 哪位大神有岛国的网站 的文章

 

随机推荐