#include <stdlib.h>
#define MaxSize 10 //定义最大长度
typedef struct{
int data[MaxSize]; //用静态数组存放数据元素
int length;
}SeqList; //顺序表类型定义
//基本操作一个初始化顺序表
void InitList(SeqList &L)
{
for(int i=0;i<MaxSize;i++)
L.data[i]=0; //将所有数据元素设置默认初始值
L.length=0;
}
int main(){
SeqList L;
InitList(L);
//.....后序操作
return 0;
}
动态分配数组,因为总报错 我把InitSize 改成L.length。
#include <stdlib.h>
#include <malloc.h>
typedef struct{
int *data;
int MaxSize; //用静态数组存放数据元素
int length;
}SeqList;
void InitList(SeqList &L)
{
L.data=(int *)malloc(L.length*sizeof(int));
L.length=0;
//L.MaxSize=InitSize;
}
void IncreaseSize(SeqList &L,int len)
{
int *p=L.data;
L.data=(int *)malloc((L.length+len)*sizeof(int));
for(int i=0;i<L.length;i++)
{
L.data[i]=p[i];
}
L.MaxSize+=len;
free(p);
}
int main(){
SeqList L;
InitList(L);
//.....后序操作
IncreaseSize(L,5);
return 0;
}
动态分布
#include <stdlib.h>
#include <malloc.h>
#include <stdlib.h>
#include <malloc.h>
#include <iostream>
using namespace std;
typedef struct{
int *data;
int MaxSize; //用静态数组存放数据元素
int length;
}SeqList;
void InitList(SeqList &L)
{
L.data=(int *)malloc(L.length*sizeof(int));
L.length=0;
//L.MaxSize=InitSize;
}
void IncreaseSize(SeqList &L,int len)
{
int *p=L.data;
L.data=(int *)malloc((L.length+len)*sizeof(int));
for(int i=0;i<L.length;i++)
{
L.data[i]=p[i];
}
L.MaxSize+=len;
free(p);
}
int main(){
SeqList L;
InitList(L);
for(int i=0;i<10;i++){
L.data[i]=i;
cout<< L.data[i]<<endl;}
//.....后序操作
IncreaseSize(L,11);
for(int j=0;j<2;j++)
{
cout<<L.data[j]<<endl;
}
return 0;
}
按位序插入(带头结点)
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
bool ListInsert(LinkList &L,int i, int e)
{
if(i<1)
return false;
LNode *p;
int j=0;
p = L;
while(p != NULL &&j<i-1)
{
p=p->next;
j++;
}
if(p==NULL)
return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
s->data = e;
s->next=p->next;
p->next=s;
return true;
}
尾插法建立链表
#include <stdlib.h>
#include <malloc.h>
#include <iostream>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
bool InitList(LinkList &L)
{
L=(LNode *)malloc(sizeof(LNode));
if(L==NULL)
return false;
L->next =NULL;
return true;
}
bool ListInsert(LinkList &L,int i,int e)
{
if(i<1)
return false;
LNode *p;
int j=0;
p=L;
while (p!=NULL && j<i-1){
p=p->next;
j++;
}
if(p==NULL)
return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
int main()
{
LinkList L;
InitList(L);
for(int i=0;i<10;i++){
L[i].data=i*2;
cout<<L[i].data<<" ";
}
ListInsert(L,1,132);
ListInsert(L,2,3);
cout<<L->next;
for(int j=0;j<9;j++){
cout<<L[j].data<<" ";
}
//cout<<L.data[1];
return 0;
}
尾插法建立单链表
#include <stdlib.h>
#include <malloc.h>
#include <iostream>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
bool InitList(LinkList &L)
{
L=(LNode *)malloc(sizeof(LNode));
if(L==NULL)
return false;
L->next =NULL;
return true;
}
LinkList List_Taillnsert(LinkList &L)
{
int x;
L=(LinkList)malloc(sizeof(LNode));
LNode *s,*r=L;
scanf("%d",&x);
while(x!=999)
{
s=(LNode *)malloc(sizeof(LNode));
s->data =x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
int main()
{
LinkList L;
InitList(L);
List_Taillnsert(L);
for(int j=0;j<9;j++){
cout<<L[j].data<<" ";
}
return 0;
}