好文档 - 专业文书写作范文服务资料分享网站

数据结构C语言算法大全

天下 分享 时间: 加入收藏 我要投稿 点赞

1) 插入操作

在顺序表L的第i (1<=L.length+1)个位置插入新元素e。如果i的输入不合法,则返回false,表示插入失败;否则,将顺序表的第i个元素以及其后的元素右移一个位置,腾出一个空位置插入新元素e,顺序表长度增加1,插入成功,返回true。

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.

bool ListInsert(SqList &L, int i, ElemType e){

//本算法实现将元素e插入到顺序表L中第i个位置 if ( i<1 || i>L.length+1 )

return false; // 判断i的范围是否有效 if(L.length>=MaxSize)

return false; // 当前存储空间已满,不能插入

for (int j =L.length; j >=i; j--) // 将第i个位置及之后的元素后移 L.data[j]=L.data[j-l]; L.data[i-1]=e; //在位置i处放入e L.length++; //线性表长度加1 return true; }

2) 删除操作

删除顺序表L中第i (1<=i<=L.length)个位置的元素,成功则返回true,否则返回false,并将被删除的元素用引用变量e返回。

复制纯文本新窗口 1. 2. 3. 4. 5. 6. 7.

bool ListDelete(SqList &L,int i, int &e){

//本算法实现删除顺序表L中第i个位置的元素 if(i<1 || i>L.length)

return false; // 判断i的范围是否有效 e=L.data[i-1] ; // 将被删除的元素赋值给e

for (int j=i; j

8. 9. 10.

L.length--; //线性表长度减1 return true; }

3) 按值查找(顺序查找)

在顺序表L中查找第一个元素值等于e的元素,并返回其下标。

1. 2.

返回0

int LocateElem(SqList L, ElemType e){

//本算法实现查找顺序表中值为e的元素,如果查找成功,返回元素位序,否则

3. 4. 5. 6. 7. 8.

int i;

for(i=0;i

return i+1; // 下标为i的元素值等于e,返回其位号i+1 return 0; //退出循环,说明查找失败 }

单链表的定义 1. 2. 3. 4.

typedef struct LNode{ //定义单链表结点类型 ElemType data; //数据域 struct LNode *next; //指针域 }LNode, *LinkList;

采用头插法建立单链表

该方法从一个空表开始,生成新结点,并将读取到的数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头,即头结点之后,如图2-4所示。

图2-4 头插法建立单链表

头插法建立单链表的算法如下:

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.

LinkList CreatList1(LinkList &L){

//从表尾到表头逆向建立单链表L,每次均在头结点之后插入元素 LNode *s;int x;

L=(LinkList)malloc(sizeof(LNode)); //创建头结点 L->next=NULL; //初始为空链表 scanf(\, &x); //输入结点的值

while(x!=9999) { //输入 9999 表示结束

s=(LNode*)malloc(sizeof(LNode) ); //创建新结点 s->data=x;

s->next=L->next; //重点(如果使用头插法的话) L->next=s; //将新结点插入表中,L为头指针 scanf (\, &x); } //while 结束

return L; }

采用尾插法建立单链表

头插法建立单链表的算法虽然简单,但生成的链表中结点的次序和输入数据的顺序不一致。若希望两者次序一致,可采用尾插法。该方法是将新结点插入到当前链表的表尾上,为此必须增加一个尾指针r,使其始终指向当前链表的尾结点,如图2-5所示。

图2-5 尾插法建立单链表

尾插法建立单链表的算法如下:

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.

LinkList CreatList2(LinkList &L){

//从表头到表尾正向建立单链表L,每次均在表尾插入元素 int x; // 设元素类型为整型 L=(LinkList)malloc(sizeof(LNode)); LNode *s, *r=L; //r 为表尾指针 scanf (\, &x); //输入结点的值

while (x!=9999) { //输入 9999 表示结束 s=(LNode *)malloc(sizeof(LNode)); s->data=x; //重点 r->next=s;

r=s; //r指向新的表尾结点 scanf (\, &x); }

r->next = NULL; //尾结点指针置空 return L; }

按序号查找结点值

在单链表中从第一个结点出发,顺指针next域逐个往下搜索,直到找到第i个结点为止,否则返回最后一个结点指针域NULL。 按序号查找结点值的算法如下:

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.

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 && jnext; j++; }

return p; //返回第i个结点的指针,如果i大于表长,p=NULL,直接返回p即

17.

}

按值查找表结点

从单链表第一个结点开始,由前往后依次比较表中各结点数据域的值,若某结点数据域的值等于给定值e,则返回该结点的指针。若整个单链表中没有这样的结点,则返回NULL。按值查找结点的算法如下:

数据结构C语言算法大全

1)插入操作在顺序表L的第i(1<=L.length+1)个位置插入新元素e。如果i的输入不合法,则返回false,表示插入失败;否则,将顺序表的第i个元素以及其后的元素右移一个位置,腾出一个空位置插入新元素e,顺序表长度增加1,插入成功,返回true。1.2.3.4.5.6.7.8.9.10.11.12.<
推荐度:
点击下载文档文档为doc格式
  • 正文标题

  • 上下篇章

  • 相关推荐

  • 精选图文

61tyy4hjs69kfa2517te4mn0g1mmhw00jna