#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;//next为指针域,存放其后继结点的地址。
}LNode,*LinkList;
//采用头插法建立单链表
LinkList CreatList1(LinkList &L)
//从表尾到表头逆向建立单链表,每次均在头结点之后插入元素
{
int x;
LNode *s;
L=(LinkList)malloc(sizeof(LNode));//创建头结点
L->next=NULL;//初始为空链表
cin>>x;
while(x!=7)
{
s=(LNode*)malloc(sizeof(LNode));//创建新结点
s->data=x;
s->next=L->next;
L->next=s;//将新结点插入表中,L为头指针
cin>>x;
}
return L;
}
//采用尾插法建立单链表
LinkList CreatList2(LinkList &L)
//从表头到表尾正向建立单链表L,每次均在表尾插入元素
{
int x;
L=(LinkList)malloc(sizeof(LNode));
LNode *s,*r=L;//r为表尾指针
cin>>x;
while(x!=7)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;//r指向新的表尾结点
cin>>x;
}
r->next=NULL;//尾结点指针置空
return L;
}
//按序号查找结点的值
LNode *GetElem(LinkList L,int i)
//取出单链表L(带头结点)中第i个位置的结点指针。
{
int j=1;//计数,初始为1
LNode *p=L->next;//头结点指针赋给p
if (i==0)
return L;//若i=0,则返回头结点
if (i<1)
return NULL;//若i无效,则返回NULL
while (p&&j<i){//从第一个结点开始找,查找到第i个结点
p=p->next;
j++;
}
return p;//返回第i个结点的指针,如果i大于表长,p=NULL,直接返回p即可。
}
//按值查找表结点
LNode *LocateElem(LinkList L,int e)
{
LNode *p=L->next;
while(p!=NULL&&p->data!=e)
p=p->next;
return p;
}
//计算表长以及打印链表
LNode* PrintLength_ListLength(LinkList L,int &length)
{
int i=0;
LNode *p=L->next;
while(p!=NULL){
cout<<p->data<<" ";
p=p->next;
i++;
}
int *q=&i;
length=*q;
return L;
}
//删除结点
bool ListDelete(LinkList &L,int i)
{
LNode *p=GetElem(L,i-1);
LNode *q;
q=p->next;
p->next=q->next;
free(q);
return true;
}
//插入结点
bool ListInsert(LinkList &L,int i,int elem)
{
LNode *q=GetElem(L,i-1);
cout<<q->data<<endl;
LNode *s;
s= (LNode*)malloc(sizeof(LNode));//要记得给新加的结点分配空间
s->next=q->next;
q->next=s;
s->data=elem;
return true;
}
int main()
{
LinkList L;
CreatList2(L);
int length;
//测试表长
PrintLength_ListLength(L,length);
cout<<"表长为:"<<length<<endl;
//测试 插入结点
if (ListInsert(L,3,99))
{
PrintLength_ListLength(L,length);
cout<<"表长为:"<<length<<endl;
}
//测试 删除结点
if (ListDelete(L,3))
{
PrintLength_ListLength(L,length);
cout<<"表长为:"<<length<<endl;
}
return 0;
}
单链线性表一
猜你喜欢
转载自blog.csdn.net/MHeartWGO/article/details/80853844
今日推荐
周排行