返回列表 发帖

[数据结构(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语言版)]数据结构 模板

顺序表: 定义: #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

返回列表 回复 发帖