带表头的单链表
表头结点的定义:
typedef struct LNode
{
int data;
struct LNode *next;
}LNode;
带表头结点的单链表的定义:
typedef struct HeadList
{
LNode *head;//头节点
int n;//链表元素的个数
}HeadList;
初始化操作
//单链表的初始化 这块没有问题
bool init(HeadList &h){
h.head->next=NULL;
h.n=0;
return true;
}
查找
int find(HeadList &h,int i){
if(i<1||i>h.n){
return 0;
}
LNode *p;
p=h.head;
for(int j=1;j<=i;j++){
p=p->next;
}
return p->data;
}
插入
/*单链表的插入*/
int insert(HeadList &h,int position,int i){
if(position<1){
return 0;
}
LNode *p=h.head;
for(int j=1;j<=position-1;j++){
p=p->next;
}//此时p执行第i-1个节点
LNode *z=(LNode *)malloc(sizeof(LNode));
z->data=i;
z->next=p->next;
p->next=z;
h.n++;
return 1;
}
删除
int shanchu(HeadList &h,int position){
if(position<1||position > h.n){
return 0;
}
LNode *p=h.head;
for(int j=1;j<=position-1;j++){
p=p->next;
}//p指向第i-1个位置
LNode*q;
q=h.head;
for(int x=1;x<=position;x++){
q=q->next;
}//q指向第i个位置
p->next=q->next;
h.n--;
return 1;
}
输出
void output(HeadList &h){
LNode*p;
p=h.head;
for(int i=1;i<=h.n;i++){
p=p->next;
cout<<p->data<<' ';
}
}
撤销
void destory(HeadList &h){
LNode *p;
while (h.head)
{
p=h.head->next;
free(h.head);
h.head=p;
}
}
完整程序
/*带表头的单链表的相关操作*/
#include<iostream>
// #include<stdlib.h>
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode;
typedef struct HeadList
{
LNode *head;//头节点
int n;//链表元素的个数
}HeadList;
//单链表的初始化 这块没有问题
bool init(HeadList &h){
h.head->next=NULL;
h.n=0;
return true;
}
//单链表的查找
int find(HeadList &h,int i){
if(i<1||i>h.n){
return 0;
}
LNode *p;
p=h.head;
for(int j=1;j<=i;j++){
p=p->next;
}
return p->data;
}
/*单链表的插入*/
int insert(HeadList &h,int position,int i){
if(position<1||position > h.n+1){
return 0;
}
LNode *p=h.head;
for(int j=1;j<=position-1;j++){
p=p->next;
}//此时p执行第i-1个节点
LNode *z=(LNode *)malloc(sizeof(LNode));
z->data=i;
z->next=p->next;
p->next=z;
h.n++;
return 1;
}
//输出操作
void output(HeadList &h){
LNode*p;
p=h.head;
for(int i=1;i<=h.n;i++){
p=p->next;
cout<<p->data<<' ';
}
}
//删除操作
int shanchu(HeadList &h,int position){
if(position<1||position > h.n){
return 0;
}
LNode *p=h.head;
for(int j=1;j<=position-1;j++){
p=p->next;
}//p指向第i-1个位置
LNode*q;
q=h.head;
for(int x=1;x<=position;x++){
q=q->next;
}//q指向第i个位置
p->next=q->next;
h.n--;
return 1;
}
//撤销操作
void destory(HeadList &h){
LNode *p;
while (h.head)
{
p=h.head->next;
free(h.head);
h.head=p;
}
}
int main(){
HeadList h;
init(h);
insert(h,1,2);
insert(h,2,4);
insert(h,3,6);
insert(h,4,8);
insert(h,5,10);
insert(h,6,12);
insert(h,7,14);
shanchu(h,7);
// cout<<find(h,7)<<endl;
output(h);
destory(h);
return 0;
}