链表的创建和使用

       最近在思考一些关于怎样才能使以后的自己看到这些文章时,又有一些感悟,而不是单单的从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; 也会用了,定义一个新的结点来进行操作;哦了



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值