您的位置:首页 > 其它

线性表的顺序存储和链式存储的实现(C)

2013-07-18 23:11 513 查看
//线性表的顺序存储

#include <stdio.h>

typedef int DataType;

#define MaxSize 15

//定义顺序表

typedef struct

{

DataType List [MaxSize];

int Size;

}Slist;

//初始化顺序表

void ListInit(Slist * S)

{

S->Size=0;

}

//插入数据

int ListInsert(Slist *S ,int i,DataType x)

{ int j;

if(i<0||i>S->Size)

{

printf("插入位置不正确!");

return 0;

}

else

{

for(j=S->Size;j>i;j--)

{

S->List[j]=S->List[j-1];

}

S->List[i]=x;

S->Size++;

return 1;

}

}

//取得元素个数

int ListLength(Slist *S)

{

return S->Size;

}

//删除元素

int ListDelete(Slist *S,int i,DataType *x)

{ int j;

if(i<0||i>S->Size-1)

{

printf("删除位置不正确!");

return 0;

}

else

{ //保存删除的数据到x所指的变量中;

*x=S->List[i];

for(j=i;j<S->Size-1;j++)

{

S->List[j]=S->List[j+1] ;



}

S->Size--;

return 1;

}

}

//取得顺序表中的元素

int ListGet(Slist *S,int i,DataType *x)

{

if(i<0||i>S->Size-1)

{

printf("没有这个元素!");

}

else

{

*x=S->List[i];

return 0;

}

}

//主函数

int main ()

{

//定义一个结构体变量

Slist mylist;

int x,b,i;

//初始化

ListInit(&mylist);

//插入数据

for(i=0;i<10;i++)

ListInsert(&mylist,i,i+6);

//取得数据元素个数

b=ListLength(&mylist);

printf("顺序表中的元素个数为:");

printf("%d \n",b);

//取得插入的数据

for(i=0;i<ListLength(&mylist);i++)

{

ListGet(&mylist,0,&x);

printf("%d \n",x);

}

return 0;

}







//线性表的链式存储

#include<stdio.h>

#include<malloc.h>

//定义链式表的结构体

typedef int DataType ;

typedef struct snode

{ DataType data;

struct snode *next;

} Lnode;

//进行初始化

void ListInit(Lnode **head)

{

*head=(Lnode*)malloc(sizeof(Lnode)); //头指针

(*head)->next=NULL;

}

//插入数据

int ListInsert(Lnode *head,int i,DataType x)

{

int j;

Lnode *p,*q;

p=head;

j=-1;

while(p->next!=NULL&&j<i-1)

{

p=p->next;

j++;

}

if(j!=i-1)

{

printf("插入的位置不对,请重新插入");

return 0;

}

q=(Lnode*)malloc(sizeof(Lnode)); //申请一个节点

q->data=x;

q->next=p->next;

p->next=q;

return 1;

}

//取得元素个数

int ListLength(Lnode *head)

{

Lnode *p;

int size=0;

p=head;

while(p->next!=NULL)

{

p=p->next;

size++;

}

return size;

}

//删除数据

int ListDelete(Lnode *head,int i,DataType *x)

{

Lnode *p,*q;

int j;

p=head;

j=-1;

while(p->next!=NULL&&j<i)

{

p=p->next;

j++;

}

if(j!=i-1)

{

printf("删除的位置不对!");

return 0;

}

q=p->next;

*x=p->data;

p->next=p->next->next;

free(q);

return 1;

}

//取得元素

int ListGet(Lnode* head,int i,DataType *x)

{

Lnode *p;

int j;

p=head;

j=-1;

while(p->next!=NULL&&j<i)

{

p=p->next;

j++;

}

if(j!=i)

{

printf("取元素位置参数有误!");

return 0;

}

*x=p->data;

return 1;

}



//销毁数据链

void ListDestroy(Lnode **head)

{

Lnode *p,*q;

p=*head;

while(p!=NULL)

{ q=p;

p=p->next;

free (q);

}

*head=NULL;

}

//主函数

void main ()

{

Lnode *mylist;

int i,x,s;

//初始化链表

ListInit(&mylist);

//插入数据

for(i=0;i<10;i++)

ListInsert(mylist,i,i+1);

//取得数据个数

s= ListLength(mylist);

printf("元素个数为:%d \n",s);

//取得所有数据

for(i=0;i<ListLength(mylist);i++)

{

ListGet(mylist,i,&x) ;

printf("%d\n",x);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: