线性链表(c语音实现)

/*

* File: main.c

* Author: CJC

*

* Created on 2013年10月29日, 上午10:49

*/

#include

#include

#define TURE 1

#define FALSE 0

#define OK 1

#define ERROR -1

#define LENGTH 10

typedef int Status;

typedef int ElemType;

typedef struct LNode

{

ElemType data;

struct LNode *next;

}LNode,*LinkList; //链表结点,指向链表结点的指针

void CreateList_L(LinkList *Lk,int n) //构造长度为n的线性链表

{

LNode *L;

L=*Lk;

int i;

for (i=n;i>0;i--)

{

LNode *p;

p=(LNode*)malloc(sizeof(LNode));

p->data=rand()%50;

p->next=L->next;

L->next=p;

}

}

void Print_L(LNode *L) //打印链表(参数为链表头结点L)

{

while(L->next)

{

L=L->next;

printf("%d ",L->data);

}

printf("\n");

}

int GetLength(LNode *L) //求链表结点长度

{

int length=0;

while(L->next!=NULL)

{

L=L->next;

length++;

}

return length;

}

ElemType GetElemData(LNode *L,int n)//返回第n个结点的值

{

int i;

for (i=0;i

{

L=L->next;

}

return L->data;

}

int GetElem(LNode *L,ElemType e)

{

int i=0;

while(L->next!=NULL)

{

L=L->next;

i++;

if (L->data==e)

return i;

}

return ERROR;

}

Status ListInsert_L(LNode *L,int i,ElemType e)

{

/*

if (iGetLength(L)+1)

{

return ERROR;

}

while(i>1)

{

L=L->next;

i--;

}

*/

int j=1;

while (L&&j

{

L=L->next; ++j;

}

if (!L||j>i) return ERROR;

LNode *s;

s=(LNode *)malloc(sizeof(LNode));

s->data=e;

s->next=L->next;

L->next=s;

return OK;

}

Status ListDelete_L(LNode *L,int i,ElemType *e)

{

if (iGetLength(L))

{

return ERROR;

}

while(i>1)

{

L=L->next;

i--;

}

LNode *q;

q=L->next;

L->next=q->next;

*e=q->data;

free(q);

return OK;

}

Status Sort_LinkList(LNode *L) //将线性表排序。由小到大

{

if(L->next==NULL) return ERROR;

LNode *p =L->next;

int i;

ElemType t;

for (i=0;i

{

while(p->next)

{

if (p->data > (p->next->data))

{

t=p->data;//交换值就可以了

p->data=p->next->data;

p->next->data=t;

}

p=p->next;

}

p=L->next;

}

return OK;

}

void MergeList_L(LNode *La,LNode *Lb,LinkList *Lc) //将有序表La,Lb合并到Lc中。去除不同元素且按有序排列。

{

LNode *pa=La->next;

LNode *pb=Lb->next;

LNode *pc=*Lc;

/*

while(pa&&pb) //方法一。这样做就改变了La,Lb。(因为改变的是Lc中next的指针,直接指向了La或者Lb的结点)

{

if (pa->data data)

{

pc->next=pa;pc=pa;pa=pa->next;

}

else

{

pc->next=pb;pc=pb;pb=pb->next;

}

pc->next=pa?pa:pb;

}

*/

while(pa&&pb) //方法二,通过新生成结点,插入到lc中的尾部,就可以不改变原La,Lc

{

LNode *s;

s=(LNode *)malloc(sizeof(LNode));

if (pa->data data)

{

s->data=pa->data;

pc->next=s;

pc=s;

pa=pa->next;

}

else

{

s->data=pb->data;

pc->next=s;

pc=s;

pb=pb->next;

}

pc->next=pa?pa:pb;

}

}

int main(int argc, char** argv) {

void CreateList_L(LinkList *L,int n);//函数声明

int GetLength(LNode *L);

ElemType GetElemData(LNode *L,int n);

Status ListInsert_L(LNode *L,int i,ElemType e);

Status Sort_LinkList(LNode *L);

Status ListDelete_L(LNode *L,int i,ElemType *e);

void MergeList_L(LNode *La,LNode *Lb,LinkList *Lc);

LNode *L; //定义头结点

L=(LNode*)malloc(sizeof(LNode));

L->next=NULL;

printf("-----------------create AND print\n");

CreateList_L(&L,LENGTH);//此处传的参数为头结点的地址

Print_L(L);

printf("-----------------get length\n");

printf("%d",GetLength(L));

printf("\n-----------------return 5 Node\n");

printf("%d",GetElemData(L,5));

printf("\n-----------------return value=29\n");

printf("%d",GetElem(L,29));

printf("\n-----------------insert\n");

if(ListInsert_L(L,3,100)!=-1)

Print_L(L);

else

printf("ERROR\n");

printf("-----------------delete\n");

ElemType e;

if(ListDelete_L(L,3,&e)!=-1)

{

Print_L(L);

printf("e=%d",e);

}

else

printf("ERROR\n");

printf("\n-----------------sort\n");

Sort_LinkList(L);

Print_L(L);

printf("\n-----------------Merge La,Lb TO Lc\n");

LNode *La; //定义头结点

La=(LNode*)malloc(sizeof(LNode));

La->next=NULL;

LNode *Lb; //定义头结点

Lb=(LNode*)malloc(sizeof(LNode));

Lb->next=NULL;

LNode *Lc; //定义头结点

Lc=(LNode*)malloc(sizeof(LNode));

Lc->next=NULL;

CreateList_L(&La,LENGTH);//此处传的参数为头结点的地址

CreateList_L(&Lb,LENGTH);//此处传的参数为头结点的地址

Sort_LinkList(La);

Sort_LinkList(Lb);

Print_L(La);

Print_L(Lb);

MergeList_L(La,Lb,&Lc);

Print_L(Lc);

return (EXIT_SUCCESS);

}

/*

* File: main.c

* Author: CJC

*

* Created on 2013年10月29日, 上午10:49

*/

#include

#include

#define TURE 1

#define FALSE 0

#define OK 1

#define ERROR -1

#define LENGTH 10

typedef int Status;

typedef int ElemType;

typedef struct LNode

{

ElemType data;

struct LNode *next;

}LNode,*LinkList; //链表结点,指向链表结点的指针

void CreateList_L(LinkList *Lk,int n) //构造长度为n的线性链表

{

LNode *L;

L=*Lk;

int i;

for (i=n;i>0;i--)

{

LNode *p;

p=(LNode*)malloc(sizeof(LNode));

p->data=rand()%50;

p->next=L->next;

L->next=p;

}

}

void Print_L(LNode *L) //打印链表(参数为链表头结点L)

{

while(L->next)

{

L=L->next;

printf("%d ",L->data);

}

printf("\n");

}

int GetLength(LNode *L) //求链表结点长度

{

int length=0;

while(L->next!=NULL)

{

L=L->next;

length++;

}

return length;

}

ElemType GetElemData(LNode *L,int n)//返回第n个结点的值

{

int i;

for (i=0;i

{

L=L->next;

}

return L->data;

}

int GetElem(LNode *L,ElemType e)

{

int i=0;

while(L->next!=NULL)

{

L=L->next;

i++;

if (L->data==e)

return i;

}

return ERROR;

}

Status ListInsert_L(LNode *L,int i,ElemType e)

{

/*

if (iGetLength(L)+1)

{

return ERROR;

}

while(i>1)

{

L=L->next;

i--;

}

*/

int j=1;

while (L&&j

{

L=L->next; ++j;

}

if (!L||j>i) return ERROR;

LNode *s;

s=(LNode *)malloc(sizeof(LNode));

s->data=e;

s->next=L->next;

L->next=s;

return OK;

}

Status ListDelete_L(LNode *L,int i,ElemType *e)

{

if (iGetLength(L))

{

return ERROR;

}

while(i>1)

{

L=L->next;

i--;

}

LNode *q;

q=L->next;

L->next=q->next;

*e=q->data;

free(q);

return OK;

}

Status Sort_LinkList(LNode *L) //将线性表排序。由小到大

{

if(L->next==NULL) return ERROR;

LNode *p =L->next;

int i;

ElemType t;

for (i=0;i

{

while(p->next)

{

if (p->data > (p->next->data))

{

t=p->data;//交换值就可以了

p->data=p->next->data;

p->next->data=t;

}

p=p->next;

}

p=L->next;

}

return OK;

}

void MergeList_L(LNode *La,LNode *Lb,LinkList *Lc) //将有序表La,Lb合并到Lc中。去除不同元素且按有序排列。

{

LNode *pa=La->next;

LNode *pb=Lb->next;

LNode *pc=*Lc;

/*

while(pa&&pb) //方法一。这样做就改变了La,Lb。(因为改变的是Lc中next的指针,直接指向了La或者Lb的结点)

{

if (pa->data data)

{

pc->next=pa;pc=pa;pa=pa->next;

}

else

{

pc->next=pb;pc=pb;pb=pb->next;

}

pc->next=pa?pa:pb;

}

*/

while(pa&&pb) //方法二,通过新生成结点,插入到lc中的尾部,就可以不改变原La,Lc

{

LNode *s;

s=(LNode *)malloc(sizeof(LNode));

if (pa->data data)

{

s->data=pa->data;

pc->next=s;

pc=s;

pa=pa->next;

}

else

{

s->data=pb->data;

pc->next=s;

pc=s;

pb=pb->next;

}

pc->next=pa?pa:pb;

}

}

int main(int argc, char** argv) {

void CreateList_L(LinkList *L,int n);//函数声明

int GetLength(LNode *L);

ElemType GetElemData(LNode *L,int n);

Status ListInsert_L(LNode *L,int i,ElemType e);

Status Sort_LinkList(LNode *L);

Status ListDelete_L(LNode *L,int i,ElemType *e);

void MergeList_L(LNode *La,LNode *Lb,LinkList *Lc);

LNode *L; //定义头结点

L=(LNode*)malloc(sizeof(LNode));

L->next=NULL;

printf("-----------------create AND print\n");

CreateList_L(&L,LENGTH);//此处传的参数为头结点的地址

Print_L(L);

printf("-----------------get length\n");

printf("%d",GetLength(L));

printf("\n-----------------return 5 Node\n");

printf("%d",GetElemData(L,5));

printf("\n-----------------return value=29\n");

printf("%d",GetElem(L,29));

printf("\n-----------------insert\n");

if(ListInsert_L(L,3,100)!=-1)

Print_L(L);

else

printf("ERROR\n");

printf("-----------------delete\n");

ElemType e;

if(ListDelete_L(L,3,&e)!=-1)

{

Print_L(L);

printf("e=%d",e);

}

else

printf("ERROR\n");

printf("\n-----------------sort\n");

Sort_LinkList(L);

Print_L(L);

printf("\n-----------------Merge La,Lb TO Lc\n");

LNode *La; //定义头结点

La=(LNode*)malloc(sizeof(LNode));

La->next=NULL;

LNode *Lb; //定义头结点

Lb=(LNode*)malloc(sizeof(LNode));

Lb->next=NULL;

LNode *Lc; //定义头结点

Lc=(LNode*)malloc(sizeof(LNode));

Lc->next=NULL;

CreateList_L(&La,LENGTH);//此处传的参数为头结点的地址

CreateList_L(&Lb,LENGTH);//此处传的参数为头结点的地址

Sort_LinkList(La);

Sort_LinkList(Lb);

Print_L(La);

Print_L(Lb);

MergeList_L(La,Lb,&Lc);

Print_L(Lc);

return (EXIT_SUCCESS);

}


相关文章

  • 混合激励线性预测低速率语音编码研究
  • 第18卷第3期 电子设计工程 2010年3月 V01.18 No.3 ElectronicDesignEngineering Mar.2010 混合激励线性预测低速率语音编码研究 贾亮,赵鹏飞.危国腾 (沈阳航空工业学院电子与信息工程学院. ...查看


  • 数字语音处理
  • 数字语音处理 摘 要 语音信号处理包括语音通信.语音增强.语音合成.语音识别和说话人识别等方面.只有通过语音信号的数字处理,语音信号的好坏.语音识别率的高低,都取决于语音信号处理的好坏.因此,语音信号处理是一项非常有意义的研究课程. 语音, ...查看


  • 基于DSP的声纹识别技术的研究
  • 第30卷第4期 辽宁工业大学学报(自然科学版) V ol.30, No.4 2010 2010年 8 月 Journal of Liaoning University of Technology(Natural Science Editio ...查看


  • 人工神经网络及其应用
  • 研究生课程考试答题纸 研究生学院 考核类型:A( )闭卷考试(80%)+平时成绩(20%): B( )闭卷考试(50%)+ 课程论文(50%): C(√)课程论文或课程设计(70%)+平时成绩(30%). 一.撰写"人工神经网络及 ...查看


  • 线性预测编码LPC
  • LPC系数预测 实验目的 语音线性预测的基本思想是:一个语音信号的抽样值可以用过去若干个取样值的线性组合来逼近.通过使实际语音抽样值与线性预测抽样值的均方误差达到最小,可以确定唯一的一组线性预测系数. 本实验要求掌握LPC原理,利用自相关法 ...查看


  • 基于维纳滤波的含噪声语音信号的恢复
  • 基于维纳滤波的含噪声语音信号的恢复 摘要 本文基于随机信号分析与处理的相关理论,采用维纳滤波技术恢复噪声中的鸟鸣声信号,通过仿真达到预期效果,对工程实践有很好的理论支持 . 关键词:维纳滤波器 频域法 实验目的 1. 熟悉维纳滤波的基本概念 ...查看


  • 随机信号分析理论的应用综述
  • 随机信号分析理论的应用综述 (结课论文) 学院: 系别:电子信息工程 班级: 姓名: 学号: 指导老师: 目录 第一章 概述 1.1 随机信号分析的研究背景 1.2 随机信号分析的主要研究问题 第二章 随机信号分析的主要内容 2.1 随机信 ...查看


  • 噪声消除的DSP算法研究
  • 噪声消除的DSP算法研究 它使用FEC编码技术(由卷积编码和维特比译码算法组成)进行数据传输,有着大批量的数据运算(包括卷积和译码等算法)和检测,而且都是采用先进的DSP处理器来完成的,其中就包括语音编码和降噪. 在语音传输的过程中,语音增 ...查看


  • 嵌入式语音识别系统设计
  • 您的论文得到两院院士关注 文章编号:1008-0570(2007)12-2-0029-02 嵌入式系统应用 嵌入式语音识别系统设计 DesignofSpeechRecognitioninEmbeddedSystem (西南科技大学)何燕玲 ...查看


热门内容