闲来无事,对链表做了一下整理...

来源:互联网 发布:java程序员的自我介绍 编辑:程序博客网 时间:2024/04/30 18:53

先对数据结构说下我的理解吧,数据结构主要就是对数据采取不同的存储方式,例如线性表,栈和队列,串,树,二叉树,图等等,有顺序存储和链表存储等方式,对着存储的数据进行构造,查找,插入,删除等等操作,完成对数据的处理。

 

首先,就是对线性表的操作,主要有顺序存储,链表存储,静态链表存储等方式存储线性表,而且有单链表,双链表,循环链表等等方式

下面就是一些基本的代码。

 

 

#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;
}//初始化静态链表

静态链表的操作就不去做了,太麻烦,还有循环链表和双链表...大致跟单链表一样,就不在赘述了...

原创粉丝点击