#include <iostream>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}Node,*LinkList;
void Init_LinkList(LinkList &s){ //初始化链表(带头节点)
s = new Node;
s->next = NULL;
}
void insert_Node1(LinkList &s,int key){ //插入操作 头插法
Node *p = new Node;
p->data = key;
p->next = NULL;
p->next = s->next;
s->next = p;
}
void insert_Node2(LinkList &s,int n,int key){ //插入操作 尾插法
Node *p,*r;
r = s;
for(int i=0;i<n;i++){ //尾插法只能在循环中使用,因为需要尾指针不断更新
p->data = key;
p->next = NULL;
r->next=p;
r=p;
}
}
int dele_Node(LinkList &s,int n){ //删除操作 按位置删除
Node *p = s;
int i=1;
while(p && i<n){
p = p->next;
i++;
}
if(!p) //如果位置超过表长,输入位置小于等于0 删除失败
return -1;
Node *q = p->next;
p->next = q->next;
delete q;
}
int get_elem(LinkList s,int n){
Node *p = s;
int i=0;
while(p && i<n){
p = p->next;
i++;
}
if(!p) //如果位置超过表长,输入位置小于等于0 返回错误
return -1;
return p->data;
}
int search_elem(LinkList s,int key){ //按值查找
Node *p = s->next;
if(!p)
return -1; //表空
while(p && p->data!=key){
p = p->next;
}
if(!p)
return -2; //查找失败
return p->data;
}
void show(LinkList s){
Node *p = s->next;
while(p){
cout<<p->data<<" ";
p = p->next;
}
}
int main(){
LinkList s;
//测试代码
Init_LinkList(s);
insert_Node1(s,1);
insert_Node1(s,2);
insert_Node1(s,3);
insert_Node1(s,4);
insert_Node1(s,5);
dele_Node(s,1);
cout<<get_elem(s,4)<<endl;
cout<<search_elem(s,2)<<endl;
show(s);
return 0;
}
数据结构与算法(单链表)
最新推荐文章于 2024-07-25 17:57:45 发布