当前位置:文档之家› 数据结构(c语言)入门代码

数据结构(c语言)入门代码

本文档适用于数据结构初学者,前提是你要有c语言基础。

作为刚接触编程的人,数据结构是比较蛋疼的。

有参考书但是没源代码,一样蛋疼。

这就是我这个文档存在的意义了。

数据结构就是数据的一种组织结构。

根据数据之间的关系,可以分为线性结构,树形结构和图。

具体到机器中,就是定义一种数据对内存中的一组数据进行组织,然后编写对这种数据的一系列操作接口。

以得到我们想要的数据结构。

本人比较随性,书写可能不太规范。

以下的代码可以编译运行数据结构1:线性表#include<stdio.h>#include<stdlib.h>#define incrment 10#define n 10typedef char elem;typedef struct{elem *head;int size;int lenth;}list;int init(list &l,int s){l.head=(elem *)malloc(s*sizeof(elem));if(!l.head)return -1;l.size=s;l.lenth=0;}int clear(list &l){l.lenth=0;return 1;}int destroy(list &l){free(l.head);return 1;}int empty(list l){if(l.lenth)return 0;else return 1;}int getelem(list l,int i,elem &e){e=*(l.head+i-1);return 1;}int lctelem(list l,elem e){int i=0;for(i;i<l.lenth;i++)if(*(l.head+i)==e)return 1;return 0;}int insert(list &l,int i,elem e){int j;l.lenth++;if(l.lenth>l.size){l.head=(elem *)realloc(l.head,(l.size+incrment)*sizeof(elem));}if(!l.head)return -1;if(i>l.lenth||i<0)return 0;for(j=l.lenth;j>i;j--){*(l.head+j-1)=*(l.head+j-2);}*(l.head+i-1)=e;}int dlt(list &l,int i){int j;if(!l.lenth)return -1;l.lenth--;if(i>l.lenth+1||i<0)return 0;for(j=i;j<l.lenth+1;j++)*(l.head+j-1)=*(l.head+j);return 1;}//以上就是数据结构的定义和操作部分void fun1(){list l;int i;char e;init(l,20);insert(l,1,'a');insert(l,2,'b');insert(l,3,'d');for(i=1;i<=3;i++){getelem(l,i,e);printf("%c\n",e);}printf("\n");insert(l,1,'c');for(i=1;i<=4;i++){getelem(l,i,e);printf("%c\n",e);}printf("\n");insert(l,3,'e');for(i=1;i<=5;i++){getelem(l,i,e);printf("%c\n",e);}printf("\n");if(empty(l))printf("now the list is empty\n");insert(l,1,'a');insert(l,2,'b');insert(l,3,'d');for(i=1;i<=3;i++){getelem(l,i,e);printf("%c\n",e);}printf("\n");dlt(l,1);for(i=1;i<=2;i++){getelem(l,i,e);printf("%c\n",e);}printf("\n");if(lctelem(l,'b'))printf("b is in the list\n");destroy(l);}void pr_min(list l){int i;elem min;min=*l.head;for(i=1;i<l.lenth;i++)if(*(l.head+i)<min)min=*(l.head+i);printf("min =%d\n",min);}void main(){list l;int i;init(l,20);l.lenth=n;for(i=0;i<l.lenth;i++)*(l.head+i)=i+1;pr_min(l);}数据结构2:线性链表#include<stdlib.h>#include<stdio.h>typedef char elem;typedef struct node{elem data;struct node *next;}node,* linklist;int creat(linklist &l){l=(linklist)malloc(sizeof(node));l->next=NULL;if(!l)return 0;return 1;}int lenth(linklist l){int j=1;linklist getl=l;while(getl->next){getl=getl->next;j++;}return j;}int put(linklist l,int i,elem e){int j;linklist getl=l;for(j=1;j<i;j++)getl=getl->next;// find the i node if(!getl)return 0;getl->data=e;return 1;}int addone(linklist l,linklist b){linklist cur_node=l;//find the last nodewhile(cur_node->next){cur_node=cur_node->next;}cur_node->next=b;b->next=NULL;return 1;}int insert(linklist l,int i,linklist b){int j;linklist getl=l;linklist q;for(j=1;j<i-1;j++)getl=getl->next;// find the i-1 nodeq=getl->next;getl->next=b;b->next=q;return 1;}int dlt(linklist l,int i){int j;linklist getl=l;linklist q;for(j=1;j<i-1;j++)getl=getl->next;// find the i-1 nodeq=getl->next;//find the i nodegetl->next=q->next;free(q);return 1;}int visit(linklist l){linklist cur_node=l;while(cur_node){printf("%c\n",cur_node->data);cur_node=cur_node->next;}return 1;void dao_visit(linklist l){linklist rcv=l;linklist rcv2=rcv;elem* a;int lenth=0;int i=0;while(rcv){lenth++;rcv=rcv->next;}a=(elem *)malloc(lenth*sizeof(elem));while(rcv2){a[i]=rcv2->data;rcv2=rcv2->next;i++;}for(i=0;i<lenth;i++)printf("%c\n",a[lenth-1-i]);}//以上是数据结构定义,以及对它的操作void main(){linklist ft;//alinklist a;//blinklist b;//clinklist c;//i// char *a;// char b[10]="hello";// a=b;// printf("%s",a);creat(ft);creat(a);creat(b);creat(c);put(ft,1,'a');addone(ft,a);put(ft,2,'b');addone(ft,b);put(ft,3,'c');insert(ft,3,c);put(ft,3,'i');dlt(ft,2);visit(ft);dao_visit(ft);// printf("%d\n",lenth(ft));// visit(b);// printf("%d\n",lenth(b)); }数据结构3:栈#include"stdlib.h"#include"stdio.h"typedef int elmtp;typedef struct{elmtp * base;elmtp * top;int stksize;}stack;int init(stack &s,int size){s.base=(elmtp *)malloc(size*sizeof(char));if(!s.base)return 0;s.top=s.base;s.stksize=size;return 1;}int push(stack &s,elmtp e){*s.top=e;s.top++;return 1;}int gettop(stack s,elmtp &e){if(s.base==s.top)return 0;e=*(s.top-1);}int pop(stack &s,elmtp &e){if(s.base==s.top)return 0;e=*(s.top-1);s.top--;return 1;}//以上是。

相关主题