1. 程式人生 > >資料結構線性表順序結構c語言實現程式碼

資料結構線性表順序結構c語言實現程式碼

#include<stdio.h>
#include<stdlib.h>
typedef int ElementType;
typedef struct LNode * PtrToLNode;
struct LNode{	
	ElementType Data;
	PtrToLNode Next;
};
typedef PtrToLNode Position;//這裡的位置是結點的地址 
typedef PtrToLNode List; //初始化
List MakeEmpty()
{
	List L;	
	L = (List)malloc(sizeof (struct LNode));
	if (!L)	
		exit (-1);	
	L->Next = NULL;	
	return L;
}
//根據指定的位序查詢
int FindKth(List L,int K)
{
	Position p;	
	int cnt = 1;//位序從1開始 	
	p = L->Next; 	
	while(p&&cnt<K)
	{		
		p = p-> Next;
		cnt++;
	}	
		if((cnt==K)&&p)
			printf("您查詢的數為:%d\n",p -> Data);
		else printf("您查詢數不存在");
} //按值查詢 
Position Find(List L,int X)
{
	Position p;	
	p = L->Next; 
	while(p&&p->Data!=X)
	{
		p = p-> Next;
	}	
	if(p) 
	printf("查詢成功,您查詢的數為:%d\n",p->Data);
	else 
	printf("您查詢數不存在");
} //插入
List Insert(List L ,ElementType X,int i)
{
	Position tmp,pre;
	int cnt =0 ;
	pre = L;
	while(pre&&cnt<i-1)
	{
		pre = pre->Next;
			cnt++;
	}
	if(pre==NULL||cnt!=i-1)
	{
		printf("插入位置引數錯誤\n");	
	}	
	else
	{
		tmp = (Position)malloc(sizeof(struct LNode));
		tmp->Data=X;
		tmp->Next=pre->Next;
		pre->Next=tmp;	
	}
	}  //刪除
bool Delete(List L,int i){
	Position tmp,pre;
	int cnt = 0;
	pre = L;
	while(pre&&cnt<i-1)
	{
		pre=pre->Next;
		cnt++;
	}	
	if(pre==NULL||cnt!=i-1||pre->Next==NULL){
		printf("刪除位置引數錯誤");	
	}	
	else
	{
		tmp = pre->Next;
		pre->Next = tmp->Next;
		free(tmp);
		printf("刪除成功");
		}
} //求表長
int Length(List L){	
	Position p;	
	int cnt = 0;
	p = L->Next;
	while(p)
	{
		p = p -> Next;
		cnt++;
	}
		return cnt;
}  
void DisLinkList(List L){
	List p = L->Next;
	printf("輸出連結串列: ");
	while (p)	
	{
		printf("%d ", p->Data);
		p = p->Next;
	}
} 
int main()
{	
	Position pre;
	Position L = MakeEmpty();
	pre = L;
	int i,n,x,len,cz,del;	//插入 	
	scanf("%d",&n);	
	for(i=1;i<=n;i++)
	{
			scanf("%d",&x);
			Insert(pre,x,i);
	}	//輸出 	
	DisLinkList(pre);
	printf("\n");	//求表長 	
	len = Length(L);
	printf("表長為:%d",len);	
	printf("\n");	//按值查詢	
	printf("請輸入你要按值查詢的數:\n");	
	scanf("%d",&cz);	
	Find(L,cz);	
	printf("\n");	//按序號查詢	
	printf("請輸入你要按序號查詢的數的序號:\n");	
	scanf("%d",&cz);	
	FindKth(L,cz);	
	printf("\n");	//刪除	
	printf("請輸入你要刪除的數的下標:\n",del);	
	scanf("%d",&del);	
	Delete(L,del);	
	DisLinkList(pre);	
	printf("\n");	
	return 0;
}