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

2018-12-19 22:03

return FALSE;} s=p;

p->prior->next=p->next; /*图中步骤①*/ p->next->prior=p->prior; /*图中步骤②*/ free(s);

return TRUE;}

P32【算法2.10 多项式相加】

struct poly *add_poly(struct poly *Ah,struct poly *Bh) {struct poly *qa,*qb,*s,*r,*Ch;

qa=Ah->next;qb=Bh->next; /*qa和qb分别指向两个链表的第一结点*/ r=qa;Ch=Ah; /*将链表Ah作为相加后的和链表*/ while(qa!=NULL&&qb!=NULL) /*两链表均非空*/ { if (qa->exp==qb->exp) /*两者指数值相等*/ {x=qa->coef+qb->coef; if(x!=0)

{ qa->coef=x;r->next=qa;r=qa; s=qb++;free(s);qa++;

} /*相加后系数不为零时*/

else {s=qa++;free(s);s=qb++;free(s);} /*相加后系数为零时*/ }

else if(qa->expexp){ r->next=qa;r=qa;qa++;} /*多项式Ah的指数值小*/ else {r->next=qb;r=qb;qb++;} /*多项式Bh的指数值小*/ }

if(qa==NULL) r->next=qb;

else r->next=qa; /*链接多项式Ah或Bh中的剩余结点*/ return (Ch); }

第三章 栈和队列

P35相应的C语言函数是: float fact(int n) {float s;

if (n= =0||n= =1) s=1; else s=n*fact(n-1); return (s); }

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

Elemtype stack[MAXNUM]; int top; } sqstack;

P39【算法3.1 栈的初始化】 int initStack(sqstack *s)

{/*创建一个空栈由指针S指出*/

if ((s=(sqstack*)malloc(sizeof(sqstack)))= =NULL) return FALSE; s->top= -1; return TRUE; }

P39【算法3.2 入栈操作】 int push(sqstack *s, Elemtype x)

{/*将元素x插入到栈s中,作为s的新栈顶*/ if(s->top>=MAXNUM-1) return FALSE; /*栈满*/ s->top++;

s->stack[s->top]=x; return TRUE; }

P39【算法3.3 出栈操作】 Elemtype pop(sqstack *s)

{/*若栈s不为空,则删除栈顶元素*/ Elemtype x;

if(s->top<0) return NULL; /*栈空*/ x=s->stack[s->top]; s->top--; return x; }

P39【算法3.4 取栈顶元素】 Elemtype getTop(sqstack *s)

{/*若栈s不为空,则返回栈顶元素*/ if(s->top<0) return NULL; /*栈空*/ return (s->stack[s->top]); }

P40【算法3.5 判栈空操作】 int Empty(sqstack *s)

{/*栈s为空时,返回为TRUE;非空时,返回为FALSE*/ if(s->top<0) return TRUE; return FALSE; }

P40【算法3.6 栈置空操作】 void setEmpty(sqstack *s)

{/*将栈s的栈顶指针top,置为-1*/

s->top= -1; }

P40 C语言定义的这种两栈共享邻接空间的结构如下: Typedef struct {

Elemtype stack[MAXNUM];

int lefttop; /*左栈栈顶位置指示器*/ int righttop; /*右栈栈顶位置指示器*/ } dupsqstack;

P41【算法3.7 共享栈的初始化】 int initDupStack(dupsqstack *s)

{/*创建两个共享邻接空间的空栈由指针S指出*/

if (s=(dupsqstack*)malloc(sizeof(dupsqstack)))= =NULL) return FALSE; s->lefttop= -1;

s->righttop=MAXNUM; return TRUE; }

P41【算法3.8 共享栈的入栈操作】

int pushDupStack(dupsqstack *s,char status,Elemtype x)

{*把数据元素x压入左栈(status='L')或右栈(status='R')*/ if(s->lefttop+1= =s->righttop) return FALSE; /*栈满*/ if(status='L') s->stack[++s->lefttop]=x; /*左栈进栈*/ else if(status='R') s->stack[--s->righttop]=x; /*右栈进栈*/ else return FALSE; /*参数错误*/ return TRUE; }

P42【算法3.9 共享栈的出栈操作】

Elemtype popDupStack(dupsqstack *s,char status)

{/*从左栈(status='L')或右栈(status='R')退出栈顶元素*/ if(status= ='L') { if (s->lefttop<0)

return NULL; /*左栈为空*/

else return (s->stack[s->lefttop--]); /*左栈出栈*/ }

else if(status= ='R')

{ if (s->righttop>MAXNUM-1) return NULL; /*右栈为空*/

else return (s->stack[s->righttop++]); /*右栈出栈*/ }

else return NULL; /*参数错误*/

}

P42链栈的C语言定义为: typedef struct Stacknode {

Elemtype data;

Struct Stacknode *next; }slStacktype;

P43【算法3.10 单个链栈的入栈操作】 int pushLstack(slStacktype *top,Elemtype x) {/*将元素x压入链栈top中*/ slStacktype *p;

if((p=(slStacktype *)malloc(sizeof(slStacktype)))= =NULL) return FALSE; /*申请一个结点*/

p->data=x; p->next=top; top=p; return TRUE; }

P43【算法3.11 单个链栈的出栈操作】 Elemtype popLstack(slStacktype *top) {/*从链栈top中删除栈顶元素*/ slStacktype *p; Elemtype x;

if (top= =NULL) return NULL; /*空栈*/ p=top; top=top->next; x=p->data;free(p);return x; }

P44【算法3.12 多个链栈的入栈操作】

int pushDupLs(slStacktype *top[M],int i,Elemtype x) {/*将元素x压入链栈top[i]中*/ slStacktype *p;

if((p=(slStacktype *)malloc(sizeof(slStacktype)))= =NULL) return FALSE; /*申请一个结点*/

p->data=x; p->next=top[i]; top[i]=p; return TRUE; }

P44【算法3.13 多个链栈的出栈操作】 Elemtype popDupLs(slStacktype *top[M],int i) {/*从链栈top[i]中删除栈顶元素*/ slStacktype *p; Elemtype x;

if (top[i]= =NULL) return NULL; /*空栈*/ p=top[i]; top[i]=top[i]->next;

x=p->data;free(p);return x; }

P47【算法3.14 中缀表达式变为后缀表达式】 # define MAXNUM 40 # define FALSE 0 # define TRUE 1 #include \#include \#include \typedef struct {

char stack[MAXNUM]; int top; } sqstack;

int initStack(sqstack *s) {/*初始化栈*/ s->top=-1; return TRUE; }

int push(sqstack *s,char x)

{/*将元素x插入到栈s中,作为s的新栈顶*/ if(s->top>=MAXNUM-1) return FALSE; /*栈满*/ s->top++;

s->stack[s->top]=x; return TRUE; }

char pop(sqstack *s)

{/*若栈s不为空,则删除栈顶元素*/ char x;

if(s->top<0) return NULL; /*栈空*/ x=s->stack[s->top]; s->top--; return x; }

char gettop(sqstack *s)

{/*若栈s不为空,则返回栈顶元素*/ if(s->top<0) return NULL; /*栈空*/ return (s->stack[s->top]); }

char precede(char x1,char x2)

{/*比较运算符x1与x2的优先*/ char result='<'; char sting[2]; sting[0]=x2; sting[1]='\\0';


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

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

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

马上注册会员

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