线性表

1.顺序表的结构定义

typedef struct
{int data[maxsize];//存放顺序表元素的数组
 int length;//存放顺序表的长度
}Sqlist;//顺序表类型的定义

2.单链表结点定义

typedef struct LNode
{int data;//data中存放结点数据域
 struct LNode *next;//指向后继结点的指针 
}LNode;//定义单链表结点类型

3.双链表结点定义

typedef struct DLNode
{int data;//data中存放结点数据域
  struct DNLode *prior;//指向前驱结点的指针
  struct DNLode *next; //指向后继结点的指针
}DLNode;   //定义双链表结点类型

例题: 已知顺序表L,其中的元素递增有序排列,设计一个算法,插入一个元素x,使该顺序表任然递增有序排列

int LocateElem(Sqlist L,int x)
{int i;
 for(i=1;i<=L.length;i++)
   if(x<L.data[i])
   {
     return i;
   }
   return i;
}
void insert(Sqlist &L,int x)
{
int p,i;
p=LocateElem(L,x);
for(i=L.length;i>=p;--i)
L.data[i+1]=L.data[i]
L.data[p]=x;
++(L.length);
}

2.删除顺序表L中下标为p,(1<=p<=length)的元素,成功返回1,否则返回0,并将被删除的元素的值赋给e.

`int listDelete(Sqlist &L,int p,int&e)
{
int i;
if(p<1||p>L.length)returm 0;
e=L.data[p];
for(i=p;i<L.length;i++)
--(L.length);
return 1;
}

3.A 和B 是两个单链表(带表头,结点),其中元素递增有序。设计一个算法将A和B归并成一个按元素值非递减有序的链表C.

void merge(LNode *A,LNode *B,LNode *&C)
{
LNode *p=A->next;
LNode *q=B->next;
LNode *r;
C=A;
C->next=NULL;
free(B);
r=C;
while(p!=NULL&q!=NULL)
{if(p->data<=q->data)
{r->next=p;p=p->next;
r=r->next;
}
else
{r->next=q;q=q->next;
r=r->next;
}
}
r->next=NULL;
if(p!=NULL )r->next=p;
if(q!=NULL)r->next=q;
}

4.查找链表C中是否存在一个值为x的结点,若存在,则删除该结点并返回1,否则返回0.

int SearchAndDelete(LNode *C,int x)
{LNode *p,*q;
p=C;
while(p->next!=NULL)
{if(p->nextt->data==x)
break;
p=p->next;
}
if(p->next==NULL)
return 0;
else
{
q=p->next;
p->next=p->next->next;
free(q);
return 1;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值