带头结点线性表的单链表的基本操作

[c]
//带头结点线性表的单链表的基本操作 void InitList(LinkList &L)
{ L=(LinkList)malloc(sizeof(LNode));
if(!L)
exit(OVERFLOW);
L->next=NULL; }

void DestroyList(LinkList &L)
{ LinkList p=L;
while(L) { // free(L);此时不能啊 //
L=p->next; p=L->next; free(L); L=p; }
}

Status ListEmpty(LinkList L)
{ int i ; if(L->next)
return FALSE;
else
return TRUE; }

void ClearList(LinkList L)
{ /* LinkList q,p=L;
while(p) { q=p->next; free(p); p=q; } */
LinkList q,p; p=L->next;
while(p)
{ q=p->next; free(p); p=q; } L->next=NULL; }

int ListLength(LinkList L)
{
int i=0; LinkList p,q=L;
while(q->next)
{ q=q->next; i++; }
return i; }
Status GetElem(LinkList L,int i,ElemType &e)
{/* LinkList q,p=L->next; int j=0; if(p) return ERROR; while(j { q=p; p=p->next; j++; } e=q->data;
*/ int j=1; LinkList p=L->next;
while(p&&jnext; j++; }
if(!p||j>1) return ERROR; e=p->data;
return OK; }
//下面的一个算法是我写的,没办法有时间再自己写吧
int LocateElem(LinkList L,ElemType e,Status(*compare)(ElemType,ElemType))
{ // 初始条件: 线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0)
// 操作结果: 返回L中第1个与e满足关系compare()的数据元素的位序。
// 若这样的数据元素不存在,则返回值为0
int i=0; LinkList p=L->next;
while(p)
{ i++; if(compare(p->data,e))
// 找到这样的数据元素
return i; p=p->next;
}
return 0; }

Status PriorElem(LinkList L,ElemType cur_e,ElemType & pre_e)
{ LinkList p=L->next,q;
// while(p&&!(q->data==cur_e))
//while(p) 为什么就不可以呢
while(p->next)
{ q=p->next;//从第二个节点开始
if(q->data==cur_e) { pre_e=(q-1)->data; return OK; }
p=q; }
return INFEASIBLE;
}

Status NextElem(LinkList L,ElemType cur_e,ElemType &next_e)
{ LinkList p=L->next,q;
// while(p) 如果p->next没有后继何有后一个结点
while(p->next)
{ q=p->next; if(p->data==cur_e) { next_e=q->data; return OK; } p=q; }
return INFEASIBLE;
}

Status ListInsert(LinkList L,int i,ElemType e)
{ LinkList s,p=L; int j=0; while(p&&jnext; j++; }
if(!p||j>i-1)
//attention
return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK; }

Status ListDelete(LinkList L,int i,ElemType e)
{ LinkList q,p=L; int j=0; while(p->next&&jnext; i++; }
if(!p->next||j>i-1)
//attention
return ERROR;
q=p->next; p->next=q->next;
e=q->data; f
ree(q);
return OK;
}

void ListTraverse(LinkList L,void (*vi)(ElemType))
{ LinkList p=L->next;
while(p)
{ vi(p->data);
p=p->next;
}
printf(“n”);
}
[/c]

线性表顺序存储结构的基本操作

[c]
//线性表顺序存储结构的基本操作
void InitList(SqList &L) // 算法2.3
{ // 操作结果:构造一个空的顺序线性表L
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
L.length=0; // 空表长度为0
exit(OVERFLOW); // 存储分配失败
L.listsize=LIST_INIT_SIZE; // 初始存储容量
}

Status ListInsert(SqList &L,int i,ElemType e)
{
ElemType *newbase,*q,*p;
if(i<1||i>L.length+1)
return ERROR;
if(L.length>=L.listsize)
{
if(!(newbase=(ElemType*)realloc(L.elem,(L.length+LISTINCREMENT)*sizeof(ElemType))))
exit (OVERFLOW);
L.elem=newbase;
L.listsize=L.length+LISTINCREMENT;
}
q=L.elem+i-1;
for(p=L.elem+L.length-1;p>=q;p–)
*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
Status ListEmpty(SqList L)
{
if(L.length==0)
return TRUE;
else return FALSE;
}
void DestroyList(SqList &L)
{
free(L.elem);
L.elem=NULL;
L.length=0;
L.listsize=0;
}
void ClearList(SqList &L)
{
L.length=0;
}
Status GetElem(SqList L,int i,ElemType &e)
{
ElemType *p;
if(i<1||i>L.length)
return ERROR;
e=*(L.elem+i-1);
return OK;
}
Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e)
{
ElemType *p;
p=(L.elem+1);
int i=2;
while(i<=L.length&&cur_e!=*p) { i++; p++; } if(i>L.length)
return INFEASIBLE;
pre_e=*(p-1);
return OK;
}
Status NextElem(SqList L,ElemType cur_e,ElemType &pre_e)
{
int i=1;
ElemType *p=L.elem;
while(i=L.length)
return INFEASIBLE;
else
{
pre_e=*(p++);
return OK;
}
}
Status ListDelete(SqList &L,int i,ElemType &e)
{
if(i<1||i>L.length)
return ERROR;
ElemType *p=L.elem+i-1,*q=L.elem+L.length-1;
e=*p;
for(p++;p<=q;p++) { *(p-1)=*p; } L.length--; return OK; } void ListTraverse(SqList L,void (*vi)(ElemType&)) { ElemType *p=L.elem; int i; for(i=1;i

灰鼠远控免杀小记

灰鼠远控免杀小记
2008 09 26
以前的远控用的PCSHARE可惜杀的太厉害了,尤其被瑞星金山盯死了,三天两头出新特征码。于是找到了一款小黑们用的相对较少的远控——灰鼠远控,来试用一下,免杀后生成就过国内杀软,把免杀的过程同叉子们共同学习一下。
先看一下这款远控的说明:程序整体框架由gh0st改进而来,DDOS攻击借鉴了盘古代码,Unicode开发参考了ByShell代码,可谓集众长于一身。另外还拥有很强大的功能,很容易上手使用。

继续阅读“灰鼠远控免杀小记”