1、设计一算法,对单链表实现逆置。
//单链表存储结构
typedef struct LNode
{ ElemType data; //数据域
struct Lnode *next; //指针域
}LNode,*LinkList;
思路:从首元结点开始,逐个把链表L当前结点p插入新的链表头部
算法:
void Inverse(LinkList &L)
{
p=L->next;
L->next=NULL;
while(p)
{
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
}
2.假设单链表的存储结构为:
//单链表的存储表示
typedef struct Node{
ElemType data; //数据域
struct Node* next; //指针域
}Node, *LinkList;
设计一算法,统计带表头结点的单链表中等于定值x的元素个数。
int CountX(LinkList link,int e)
{
}
思路:
从头结点开始遍历,判断结点的数据与x的值是否相等,如果相等,计数器j+1,最后返回j的值。
算法:
int CountX(LinkNode link,int e)
{
int j = 0;
node *p=link->next;
while (p)
{
if (p->data == e)
j++;
p = p->next;
}
return j;
}
3.带头结点的单链表的存储结构为:
typedef struct LNode
{ ElemType data; //数据域
struct LNode *next; //指针域
}LNode, *LinkList;
线性表操作说明:
LENGTH(L)
初始条件:线性表L已存在。
操作结果:返回L中数据元素个数。
写一算法,在带头结点的单链表结构上实现线性表操作LENGTH(L)。
思路:从头结点开始遍历,统计有数据的结点,sum+1,最后返回sum的值
算法:
int LENGTH(LinkList L)
{
LinkList p=L->next;
int sum=0;
while(p)
{
sum++;
p=p->next;
}
return sum;
}