先对数据结构说下我的理解吧,数据结构主要就是对数据采取不同的存储方式,例如线性表,栈和队列,串,树,二叉树,图等等,有顺序存储和链表存储等方式,对着存储的数据进行构造,查找,插入,删除等等操作,完成对数据的处理。
首先,就是对线性表的操作,主要有顺序存储,链表存储,静态链表存储等方式存储线性表,而且有单链表,双链表,循环链表等等方式
下面就是一些基本的代码。
#define AddSize 100
#include<stdio.h>
#include<stdlib.h>
typedef struct{
char *sqlist;
int length;
int listsize;
}list;//顺序存储线性表
typedef struct{
char data;
int cur;
}component,slinklist[Max];//静态链表
typedef struct lnode{
char data;
struct lnode *next;
}linklist;//链式存储线性表
void InitList(list &l){
l.sqlist=(char *)malloc(Max*sizeof(char));
if(!l.sqlist)
exit(0);
l.length=0;
l.listsize=Max;
}//初始化顺序线性表
linklist *CreateLinklist(){
char ch;
linklist *head,*r,*s;
head=(linklist *)malloc(sizeof(linklist));
r=head;
ch=getchar();
while(ch=!'#'){
s=(linklist *)malloc(sizeof(linklist));
s->data=ch;
r->next=s;
r=s;
ch=getchar();
}
r->next=NULL;
return head;
}//创建链表
int InsertList(list &l,int i,char c){
if(i<1||i>l.length+1)
return 0;
if(l.length==l.listsize){
char *newbase=(char *)realloc(l.sqlist,(l.listsize+AddSize)*sizeof(char));
if(!newbase)
exit(0);
l.sqlist=newbase;
l.listsize+=AddSize;
}
char *q=&(l.sqlist[i-1]);
char *p=&(l.sqlist[l.length-1])
for(;p>=q;p--)
*(p+1)=*p;
*q=c;
++l.length;
return 1;
}//插入顺序表中元素
int DeleteList(list &l,int i){
if(i<1||i>l.length+1)
return 0;
char *p=&(l.sqlist[i]);
char ch=*p;
char *q=&(l.sqlist[l.length-1]);
for(;p<=q;p++)
*(p-1)=*p;
--l.length;
return 1;
}//删除顺序表中元素
void InsertLinklist(linklist *head,int i,char c){
linklist *s=(linklist *)malloc(sizeof(linklist));
s->data=c;
linklist *r=head;
int j=0;
while(r&&j<i){
r=r->next;
j++;
}
s->next=r->next;
r->next=s;
}//插入链表元素
void DeleteLinklist(linklist *head,int i){
linklist *r=head;
int j=0;
while(r&&j<i-1){
r=r->next;
j++;
}
r->next=r->next->next;
}//删除链表元素
void MergeList(linklist *a,linklist *b,linklist *c){
//当a,b,链表元素递减排列时,将a,b合并成c递减排列
a=a->next;
b=b->next;
while(a&&b){
if(a->data<=b->data){
c->next=a;
c=a;
a=a->next;
}
else{
c->next=b;
c=b;
b=b->next;
}
}
c->next=a?a:b;
}
void InitSlnklist(slinklist &space){
for(i=0;i<Max-1;i++)
space[i].cur=i+1;
space[Max-1].cur=0;
}//初始化静态链表
静态链表的操作就不去做了,太麻烦,还有循环链表和双链表...大致跟单链表一样,就不在赘述了...