最近在思考一些关于怎样才能使以后的自己看到这些文章时,又有一些感悟,而不是单单的从acm上运行完事就没了,而我也应该多从编写错误入手,以更好地反省,所以要再接再厉,不断完善咯,对于程序,我也应该多写一些关键的备注。
#include<iostream>
#include<string>
using namespace std;
typedef int ElemType;
typedef struct Lnode
{
ElemType data;
struct Lnode *next;
}linknode,*linklist;
linklist createmptylinklist()//创建空表
{
linklist h = new Lnode;
h->next=NULL;
return h;
}
int insertlinklist(linklist h,int x,int loc)//插入操作
{
linklist p;
if(loc<0) return -1;
while(loc--)
{
h=h->next;
}
p= new Lnode;
p->data=x;
p->next=h->next;
h->next=p;
return 0;
}
void visitlinklist(linklist h)//查看单链表
{
linklist p;
p=h->next;
cout<<"the linklist is :"<<endl;
while (p != NULL)
{
cout<<p->data<<endl;
p = p->next;
}
cout<<endl;
}
int seeklinklist(linklist h,ElemType e)//查询操作,因为原来是Lnode*类型,然后return p时会出现错误,所以加了个i进行计数;
{
int i=0;
linklist p = new Lnode;
p = h;
while(p&&p->data!=e) {p=p->next;i++;}
return i;
}
void listdelete(linklist &l,int i)//在带头节点的单链表中删除第i个元素e
{
int e;
int j=0;
linklist p;
p=new Lnode;
p=l;
while((p->next)&&(j<i-1)) {p=p->next;++j;}
if(!(p->next)||j>i-1){cout<<"出错";}
linklist q;
q=new Lnode;
q=p->next;
p->next=q->next;
e=q->data;
delete q;
}
void inverlinklist(linklist &l)//逆制单链表
{
linklist p,s;
s= new Lnode;
p=l;
l=NULL;
while(p)
{
s=p;p=p->next;
s->next=l;l=s;
}
}
int main()
{
linklist list;
list = createmptylinklist();
for (int i = 0; i < 10; i++)
{
insertlinklist(list,i,i);
}
listdelete(list,3);
visitlinklist(list);
cout<<seeklinklist(list,9)<<endl;
inverlinklist(list);
return 0;
}
原来Lnode*也是一种特殊的数据类型 和 int 一样; linklist s; s= new Lnode; 也会用了,定义一个新的结点来进行操作;哦了