数据结构源代码(C语言描述)(3)

2018-12-19 22:03

if (((x1=='+'||x1=='-')&&(strstr(\((x1=='*'||x1=='/')&&strstr(\(x1==')'&&strstr(\ {result='>';}

else if(x1=='('&&x2==')'||x1=='#'&&x2=='#') {result='=';}

else if (x1==')'&&x2=='('||x1=='#'&&x2==')') {result=' ';} return result; } main()

{sqstack *optr;

char s[80],c,y; int i=0;

optr=(sqstack *)malloc(sizeof(sqstack)); gets(s);

initStack(optr); push(optr,'#'); c=s[i];

while(c!='#'||gettop(optr)!='#')

{if(c!='+'&&c!='-'&&c!='*'&&c!='/'&&c!='('&&c!=')'&&c!='#') {printf(\ if(c=='\\0') break; } else

switch (precede(gettop(optr),c))

{case '<':{push(optr,c);c=s[++i];break;} case '=':{pop(optr);c=s[++i];break; } case '>':{y=pop(optr); printf(\ break;}} } printf(\}

P51 用C语言定义的顺序存储结构的队列如下: # define MAXNUM <最大元素数> typedef struct {

Elemtype queue[MAXNUM]; int front; /*队头指示器*/ int rear; /*队尾指示器*/ } sqqueue;

P51【算法3.15 顺序队列的初始化】 int initQueue(sqqueue *q)

{/*创建一个空队列由指针q指出*/

if ((q=(sqqueue*)malloc(sizeof(sqqueue)))= =NULL) return FALSE; q->front= -1;

q->rear=-1; return TRUE; }

P52【算法3.16 顺序队列的入队列操作】 int append(sqqueue *q,Elemtype x)

{/*将元素x插入到队列q中,作为q的新队尾*/

if(q->rear>=MAXNUM-1) return FALSE; /*队列满*/ q->rear++;

q->queue[q->rear]=x; return TRUE; }

P52【算法3.17 顺序队列的出队列操作】 Elemtype delete(sqqueue *q)

{/*若队列q不为空,则返回队头元素*/ Elemtype x;

if(q->rear= =q->front) return NULL; /*队列空*/ x=q->queue[++q->front]; return x; }

P52【算法3.18 顺序队列的取头元素操作】 Elemtype getHead(sqqueue *q)

{/*若队列q不为空,则返回队头元素*/

if(q->rear= =q->front) return NULL; /*队列空*/ return (q->queue[s->front+1]); }

P52【算法3.19 顺序队列的非空判断操作】 int Empty(sqqueue *q)

{/*队列q为空时,返回TRUE;否则返回FALSE*/ if (q->rear= =q->front) return TRUE; return FALSE; }

P53【算法3.20 顺序队列的求长度操作】 int length(sqqueue *q)

{/*返回队列q的元素个数*/ return(q->rear-q->front); }

P54用C语言定义循环队列结构如下: typedef struct

{Elemtype queue[MAXNUM];

int front; /*队头指示器*/ int rear; /*队尾指示器*/ int s; /*队列标志位*/ }qqueue;

P54【算法3.21 循环队列的初始化】 int initQueue(qqueue *q)

{/*创建一个空队列由指针q指出*/

if ((q=(qqueue*)malloc(sizeof(qqueue)))= =NULL) return FALSE; q->front= MAXNUM; q->rear=MAXNUM; q->s=0; /*置队列空*/ return TRUE; }

P55【算法3.22 循环队列的入队列操作】 int append(qqueue *q,Elemtype x)

{/*将元素x插入到队列q中,作为q的新队尾*/

if (( q->s= =1)&&(q->front= =q->rear)) return FALSE; q->rear++;

if (q->rear= =MAXNUM) q->rear=0; q->queue[q->rear]=x;

q->s=1; /*置队列非空*/ return TRUE; }

P55【算法3.23 循环队列的出队列操作】 Elemtype delete(qqueue *q)

{/*若队列q不为空,则返回队头元素*/ Elemtype x;

if (q->s= =0) retrun NULL; /*队列为空*/ q->front++;

if (q->front= =MAXNUM) q->front=0; x=q->queue[q->front];

if (q->front = =q->rear) q->s=0; /*置队列空*/ return x; }

P56 用C语言定义链队列结构如下: typedef struct Qnode {Elemtype data; struct Qnode *next;

}Qnodetype; /*定义队列的结点*/ typedef struct

{ Qnodetype *front;/*头指针*/

/*队列满*/ Qnodetype *rear; /*尾指针*/ }Lqueue;

P56【算法3.24 链队列的初始化】 int initLqueue(Lqueue *q) {/*创建一个空链队列q*/

if ((q->front=(Qnodetype*)malloc(sizeof(Qnodetype)))= =NULL) return FALSE; q->rear=q->front;

q->front->next=NULL; return TRUE; }

P56【算法3.25 链队列的入队列操作】 int Lappend(Lqueue *q,Elemtype x)

{/*将元素x插入到链队列q中,作为q的新队尾*/ Qnodetype *p;

if ((p=(Qnodetype*)malloc(sizeof(Qnodetype)))= =NULL) return FALSE; p->data=x;

p->next=NULL; /*置新结点的指针为空*/

q->rear->next=p; /*将链队列中最后一个结点的指针指向新结点*/ q->rear=p; /*将队尾指向新结点*/ return TRUE; }

P57【算法3.26 链队列的出队列操作】 Elemtype Ldelete(Lqueue *q)

{/*若链队列q不为空,则删除队头元素,返回其元素值*/ Elemtype x; Qnodetype *p;

if(q->front->next= =NULL) return NULL; /*空队列*/ P=q->front->next; /*取队头*/

q->front->next=p->next; /*删除队头结点*/ x=p->data; free(p); return x; }

第四章 串

P62 用字符数组存放字符串时,其结构用C语言定义如下: #define MAXNUM <允许的最大的字符数> typedef struct {

char str[MAXNUM];

int length; /*串长度*/

} stringtype; /* 串类型定义*/

P62 用链表存放字符串时,其结构用C语言定义如下: typedef struct node{ char str;

struct node *next; } slstrtype;

P63 用块链存放字符串时,其结构用C语言定义如下: typedef struct node{ char str[4];

struct node *next; } slstrtype;

P63 用堆存放字符串时,其结构用C语言定义如下: typedef struct{ char *str; int length; } HSstrtype;

P65 C语言中用字符数组存储字符串时,结构定义如下: #define MAXNUM 80 typedef struct {

char str[MAXNUM]; int length; /*串长度*/

} stringtype; /* 串类型定义*/

P65【算法4.1 在静态存储方式中求子串】 int substr(stringtype s1,stringtype * s2,int m,int n) {int j,k;j=s1.length;

if(m<=0||m>j||n<0) {(*s2).str[0]='\\0';(*s2).length=0;return FALSE; } /*参数错误*/ k=strlen(&s1.str[m-1]) ; /*求子串的长度*/ if (n>k) (*s2).length=k;

else (*s2).length=n; /*置子串的串长*/

for(j=0;j<=(*s2).length;j++,m++) (*s2).str[j]=s1.str[m-1]; (*s2).str[j]='\\0'; /*置结束标记*/ return TRUE; }

P66 假设链表中每个结点仅存放一个字符,则单链表定义如下 typedet struct node{ char str;

struct node *next;


数据结构源代码(C语言描述)(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:不应该为了公共财产而牺牲个人生命

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: