线性表的增删查
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50
typedef int ElemType;
typedef struct{
ElemType data[MaxSize];
int length;
}SqList;
#define InitSize 100
typedef struct{
ElemType *data;
int capacity;
int length;
}SeqList;
bool ListInsert(SqList &L,int i,ElemType e)
{
if(i<1||i>L.length+1)
return false;
if(L.length>=MaxSize)
return false;
for(int j=L.length;j>=i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
return true;
}
bool ListDelete(SqList &L,int i,ElemType &e)
{
if(i<1||i>L.length)
return false;
e=L.data[i-1];
for(int j=i;j<L.length;j++)
L.data[j-1]=L.data[j];
L.length--;
return true;
}
int LocateElem(SqList L,ElemType e)
{
int i;
for(i=0;i<L.length;i++)
if(L.data[i]==e)
return i+1;
return 0;
}
void PrintList(SqList &L)
{
for(int i=0;i<L.length;i++)
{
printf("%4d",L.data[i]);
}
printf("\n");
}
int main()
{
SqList L;
bool ret;
ElemType del;
L.data[0]=1;
L.data[1]=2;
L.data[2]=3;
L.length=3;
ret=ListInsert(L,2,60);
if(ret)
{
printf("插入成功\n");
PrintList(L);
}else{
printf("插入失败\n");
}
ret=ListDelete(L,1,del);
if(ret)
{
printf("删除成功\n");
printf("删除元素值为 %d\n",del);
PrintList(L);
}else{
printf("删除失败\n");
}
ret=LocateElem(L,60);
if(ret)
{
printf("查找成功\n");
printf("元素位置为 %d\n",ret);
}else{
printf("查找失败\n");
}
system("pause");
}
线性表的链式表示
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList CreatList1(LinkList &L)
{
LNode *s;int x;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
LinkList CreatList2(LinkList &L)
{
int x;
L=(LinkList)malloc(sizeof(LNode));
LNode *s,*r=L;
scanf("%d",&x);
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
LNode *GetElem(LinkList L,int i)
{
int j=1;
LNode *p=L->next;
if(i==0)
return L;
if(i<1)
return NULL;
while(p&&j<i)
{
p=p->next;
j++;
}
return p;
}
LNode *LocateElem(LinkList L,ElemType e)
{
LNode *p=L->next;
while(p!=NULL&&p->data!=e)
p=p->next;
return p;
}
bool ListFrontInsert(LinkList L,int i,ElemType e)
{
LinkList p=GetElem(L,i-1);
if(NULL==p)
{
return false;
}
LinkList s=(LNode*)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
bool ListDelete(LinkList L,int i)
{
LinkList p=GetElem(L,i-1);
if(NULL==p)
{
return false;
}
LinkList q;
q=p->next;
p->next=q->next;
free(q);
return true;
}
void PrintList(LinkList L)
{
L=L->next;
while(L!=NULL)
{
printf("%3d",L->data);
L=L->next;
}
printf("\n");
}
int main()
{
LinkList L;
LinkList search;
CreatList2(L);
PrintList(L);
search=GetElem(L,2);
if(search!=NULL)
{
printf("按序号查找成功\n");
printf("%d\n",search->data);
}
search=LocateElem(L,6);
if(search!=NULL)
{
printf("按值查找成功\n");
printf("%d\n",search->data);
}
ListFrontInsert(L,2,99);
PrintList(L);
ListDelete(L,4);
PrintList(L);
system("pause");
}
双向链表
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct DNode{
ElemType data;
struct DNode *prior,*next;
}DNode,*DLinkList;
DLinkList Dlist_head_insert(DLinkList &DL)
{
DNode *s;int x;
DL=(DLinkList)malloc(sizeof(DNode));
DL->next=NULL;
DL->prior=NULL;
scanf("%d",&x);
while(x!=9999){
s=(DLinkList)malloc(sizeof(DNode));
s->data=x;
s->next=DL->next;
if(DL->next!=NULL)
{
DL->next->prior=s;
}
s->prior=DL;
DL->next=s;
scanf("%d",&x);
}
return DL;
}
DLinkList Dlist_tail_insert(DLinkList &DL)
{
int x;
DL=(DLinkList)malloc(sizeof(DNode));
DNode *s,*r=DL;
DL->prior=NULL;
scanf("%d",&x);
while(x!=9999){
s=(DNode*)malloc(sizeof(DNode));
s->data=x;
r->next=s;
s->prior=r;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return DL;
}
DNode *GetElem(DLinkList DL,int i)
{
int j=1;
DNode *p=DL->next;
if(i==0)
return DL;
if(i<1)
return NULL;
while(p&&j<i)
{
p=p->next;
j++;
}
return p;
}
bool DListFrontInsert(DLinkList DL,int i,ElemType e)
{
DLinkList p=GetElem(DL,i-1);
if(NULL==p)
{
return false;
}
DLinkList s=(DLinkList)malloc(sizeof(DNode));
s->data=e;
s->next=p->next;
p->next->prior=s;
s->prior=p;
p->next=s;
return true;
}
bool DListDelete(DLinkList DL,int i)
{
DLinkList p=GetElem(DL,i-1);
if(NULL==p)
{
return false;
}
DLinkList q;
q=p->next;
if(q==NULL)
return false;
p->next=q->next;
if(q->next!=NULL)
{
q->next->prior=p;
}
free(q);
return true;
}
void PrintDList(DLinkList DL)
{
DL=DL->next;
while(DL!=NULL)
{
printf("%3d",DL->data);
DL=DL->next;
}
printf("\n");
}
int main()
{
DLinkList DL;
DLinkList search;
Dlist_head_insert(DL);
PrintDList(DL);
search=GetElem(DL,2);
if(search!=NULL)
{
printf("按序号查找成功\n");
printf("%d\n",search->data);
}
DListFrontInsert(DL,3,99);
PrintDList(DL);
DListDelete(DL,2);
PrintDList(DL);
system("pause");
}