返回列表 发帖

[数据结构(C语言版)]数据结构 模板

[color=#B22222]线性表: 线性表基本运算 (1)置空表setnull(L) 将线性表L置成空表。 (2)求长度length(L) 求给定线性表L中数据元素的个数。 (3)取元素get(L,i) 若i<=length(L),则结果是线性表L中的第i个数据元素,否则为空元素null,i表示位序。 (4)定位函数locate(L,x) 当线性表中存在一个值为x的数据元素,则结果是该数据元素在表中的位序,否则,将给出一个值,表示值为x的数据元素不存在。如果线性表中值为x的数据元素不止一个,则结果是第一次找到的数据元素的位序。 (5)前趋函数prior(L,x) 若x为线性表L中的一个数据元素,且其位序大于1,则结果为L的直接前趋。否则,给出一个特殊值示出该元素无前趋。 (6)后继函数next(L,x) 若x为线性表L中的一个数据元素,且其位序小于length(L),则结果为该元素的后继,否则,给出一个特殊值示出该元素无后继。 (7)插入insert(L,x,i) 若1<=i<=length(L)+1时,则在线性表L中的第i个位置插入一个值为x的新元素,使运算前长度为n的线性表变为长度为n+1的线性表。 (8)删除delete(L,i) 若1<=i<=length(L)时,则结果为删除线性表L中的第i个元素,使运算前长度为n的线性表变为长度为n-1的线性表。

[数据结构(C语言版)]数据结构 模板

顺序表: 定义: #define maxsize maxlen; typedef int elemtype; typedef struct {elemtype vec[maxlen]; int len;} sequenlist; 插入: int insert(L,x,i) sequenlist *L; int i; {int j; if(((*L).len)>=maxlen-1) {printf("the list is overflow!\n") return Null;} else if((i<1)||(i>(*L).len+1)) {printf("position is not correct!\n"); return Null; } else {for(j=(*L).len;j>=i-1;j--) (*L).vec[j+1]=(*L).vec[j]; (*L).vec[i-1]=x; (*L).len=(*L).len+1; } return(1); } 删除: void delete(L,i) sequenlist *L; int i,*y; {int j; if((i<1)||(i>(*L).len+1)) printf("delete fail\n"); else {*y=(*L).vec[i-1]; for(j=i;j<=(*L).len;j++) (*L).vec[j-1]=(*L).vec[j]; (*L).len-- } }

TOP

[数据结构(C语言版)]数据结构 模板

单链表: 定义: typedef int elemtp; typedef struct node {elemtp data; struct node *next;} linklist; linklist *head,*p; 建立单链表:带头结点 linklist *creatlist() {char ch; int x; linklist *head,*r,*p; p=malloc(sizeof(linklist)); head=p; p->next=Null; r=p; ch=getchar(); while(ch!=';?';) {scanf("%d",&x); p=malloc(sizeof(linklist)); p->data=x; p->next=Null; r->next=p; r=r->next; ch=getchar(); } return(head); } 建立单链表:不带头结点 linklist *creatlist() {char ch; int x; linklist *head,*p,*r; head=Null; r=Null; ch=getchar(); while(ch!=';?';) {p=malloc(sizeof(linklist)); scanf("%d",&x); p->data=x; if(head==Null) head=p; else r->next=p; r=p; ch=getchar(); } if(r!=Null) r->next=Null; return head; } 查找:按值查找 linklist *locate(head,k) linklist *head; elemtp k; {linklist *s; s=head->next; while(s!=Null) if(s->data!=k) s=s->next; else break; return s; } 查找:按序号查找 linklist *Get(head,i); linklist *head; int i; {int j; linklist *p; p=head;j=0; while((p->next!=Null)&&(i>j)) {p=p->next; j++; } if(i==j) return p; else return Null; } 插入: insert(p,x)/*将值为x的新结点插入*p之后*/ linklist *p; elemtp x; {linklist *s; s=malloc(sizeof(linklist)); s->data=x; s->next=p->next; p->next=s; } void insert(head,x,k)/*在单链表中值为k的结点之前插入一个值为x的新结点*/ linklist *head; int x,k; {linklist *q,*p,*r; r=malloc(sizeof(linklist)); r->data=x; if(head->next==Null) {head->next=r; r->next=Null; } else {q=head->next; p=head->next->next; while(p!=Null) {if(p->data!=k) {q=p; p=p->next;} else break; if(p!=Null) {q->next=r; r->next=p;} else {q->next=r; r->next=Null;} } } } 删除: delete(p) /*删除*p结点的后继*/ linklist *p; {linklist *r; r=p->next; p->next=r->next; free(r);} linklist *delete(head,i)/*删除单链表head的第i个结点*/ linklist *head,*s; int i; {int j=0; linklist *p,*q; p=head; while((p->next!=Null)&&(jnext;j++;} if(p->next==Null) {q=p->next; p->next=p->next->next; free(q); } else return Null; s=head; return s; }

TOP

[数据结构(C语言版)]数据结构 模板

循环链表:
只要将单链表算法中出现的Null改为head

TOP

[数据结构(C语言版)]数据结构 模板

双向循环链表 定义: typedef struct dupnode {elemtp data; struct dupnode *next,*prior;} dulinklist; dulinklist *head; 插入:有头结点 void insdulist(head,i,x)/*在双向循环链表head中的第i个结点之前插入值为x的新结点*/ dulinklist *head; int i; elemtp x; {dulinklist *p,*s; int j; p=head; j=0; while((p->next!=head)&&(jnext; j++;} if((i>0)&&(j=i-1)) {s=malloc(sizeof(dulinklist)); s->data=x; s->next=p->next; s->prior=p; p->next=s; p->next->prior=s; } else printf("error\n"); } 删除: void deledulist(head,i) dulinklist *head; int i; {dulinklist *p; int j; p=head; j=0; while((p->next!=head)&&(jnext; j++;} if((i>0)&&(j==i)) {p->prior->next=p->next; p->next->prior=p->prior; free(p);} else printf("error\n"); }

TOP

[数据结构(C语言版)]数据结构 模板

线性表,模板:

TOP

[数据结构(C语言版)]数据结构 模板

:)
我以前写过C++版发到这里

TOP

[数据结构(C语言版)]数据结构 模板

再起个帖子吧。。。也给个rar我下来看看。。。算是给我做个辅导

TOP

[数据结构(C语言版)]数据结构 模板

栈基本运算:
(1)初始化栈:inistack(s)
将栈s置成空栈,建立起栈顶指针。
(2)进栈:push(s,x)
s为已知栈,若s未满,则将x插入栈顶,并使栈顶指针指向x,函数返回true;否则出错,函数返回false值。
(3)出栈:pop(s)
s为已知栈,若s非空,则函数返回栈顶元素,且从栈中删去栈顶元素;否则函数返回空元素值Null。
(4)取栈顶元素:gettop(s)
s为已知栈,若s非空,则函数返回栈顶元素;否则函数返回空元素值Null。
(5)判栈空:empty(s)
若s为空栈,则函数true值,否则返回false值。

TOP

[数据结构(C语言版)]数据结构 模板

顺序栈 定义: #define MAXNUM 100 typedef struct {elemtype stack[MAXNUM]; int top;} sqstktp; sqstktp *s; 初始化栈算法: void inistack(sqstktp *s) {s->top=1;} 进栈算法: #define ture 1 #define false 0 int push(sqstktp *s,elemtype x) {if(s->top>=MAXNUM-1) return(false); else {s->stack[++s->top]=x; return(true); } } 出栈算法: elemtype pop(sqstktp *s) {if(s->top<0) return(Null); else {s->top--; return(s->stack[s->top+1]);} } 取栈顶元素算法: elemtype gettop(sqstktp *s) {if(s->top<0) return(Null); else return(s->stack[s->top];) } 判栈空算法: int empty(sqstktp *s) /*int? boolean?*/ {if(s->top<0) return(true); else return(false); }

TOP

[数据结构(C语言版)]数据结构 模板

顺序栈两栈共享空间: 定义: typedef struct {elemtype stack[m]; int top[2];} dustktp; 初始化算法: void inistack(dustktp *s) {s->top[0]=-1; s->top[1]=m; } 进栈算法: int push(dustktp *s,int i,elemtype x) {if(s->top[0]==s->top[1]-1) {printf("栈已满"); return(False);} if(i!=0||i!=1) {printf("栈参数出错"); return(False);} if(i==0) s->stack[++s->top[0]]=x; else s->stack[++s->top[1]]=x; return(True); } 出栈算法: elemtype pop(dustktp *s,int i) {if(i!=0||i!=1) {printf("栈参数出错"); return(false);} if(i==0) {if(s->top[0]<=-1) {printf("0号栈已空"); return(Null);} else {s->top[0]--; return(s->stack[s->top[0]+1]);} } else if(s->top[1]==m) {printf("1号栈已空"); return(Null);} else {s->top[1]++; return(s->stack[s->top[1]-1]);} }

TOP

[数据结构(C语言版)]数据结构 模板

单链栈
定义:
typedef struct node
{elemtype data;
struct node *next;} linkstktp;
linkstktp *top;
进栈算法:
void push(linkstktp *top,elemtype x)
{linkstktp *p;
p=(linkstktp *)malloc(sizeof(linkstktp));
p->data=x;
p->next=top->next;
top->next=p;}
出栈算法:
elemtype pop(linkstktp *top)
{linkstktp *p;
elemtype x;
p=top->next;
if(p=Null)
   {printf("栈已空");
    return(Null);}
else
   {top->next=p->next;
   x=p->data;
   free(p);
   return(x);
   }
}

TOP

[数据结构(C语言版)]数据结构 模板

队列基本运算:
(1)初始化队列:iniqueue(Q)
设置一个空的队列Q。
(2)入队列:enqueue(Q,X)
Q为已知队列,在队尾加入数据元素X,使X成为新的队尾元素。
(3)出队列:dlqueue(Q)
Q为已知队列,若Q非空,则删除队头元素,并返回该队头元素,再设置其后继元素为新的队头元素;否则返回空元素值Null
(4)取队头元素:gethead(Q)
Q为已知队列,若Q非空,则返回队头元素;否则返回空元素值Null
(5)判队列空;empty(Q)
若队列Q为空,则返回true,否则返回false

TOP

[数据结构(C语言版)]数据结构 模板

顺序队列
定义:
typedef struct
{elemtype queue[MAXSIZE];
int front,rear;} sequeuetp;
初始化算法:
void iniqueue(sequeue *s)
{s->front=-1;
s->rear=-1;}
入队列算法:
int enqueue(sequeuetp *s,elemtype x)
{if(s->rear==MAXSIZE-1)
return(false);
else
  {s->queue[++s->rear]=x;
   return(true);
  }
}
出队列算法:
elemtype dlqueue(sequeuetp *s)
{if(s->front==s->rear)
   return(Null);
else
   {return(s->queue[++s->front];)}
}

TOP

[数据结构(C语言版)]数据结构 模板

循环队列
入队列算法:
int encycque(sequeuetp *s,elemtype x)
{if((s->rear+1)%MAXSIZE==front)
   return(false);
else
   {s->rear=(s->rear+1)%MAXSIZE;
    s->queue[s->rear]=x;
    return(true);}  
}

出队列算法:
elemtype dlcycque(sequeuetp *s)
{if(s->front==s->rear)
   return(Null);
else
  {s->front=(s->front+1)%MAXSIZE;
  return(s->queue[s->front]);
  }
}

TOP

返回列表 回复 发帖