線性表的順序存儲和鏈式存儲的實現(C)
//線性表的順序存儲
#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;
}
} node
//主函數
函數
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);
}
}
歡迎關注本站公眾號,獲取更多信息