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;
}
}