C語言數據結構之線性表的基本操作


線性表的基本操作

內容:

(1)順序表的操作

輸入一組整型元素序列,建立線性表的順序存儲結構。實現該線性表的遍歷。在該順序表中查找某一元素,查找成功顯示查找元素,否則顯示查找失敗。在該順序表中刪除或插入指定元素。 建立兩個按值遞增有序的順序表,將他們合並成一個按值遞增有序的順序表。

(2)單鏈表的操作

輸入一組整型元素序列,使用尾插法建立一個帶有頭結點的單鏈表。 實現該線性表的遍歷。在該單鏈表的第i個元素前插入一個整數。刪除該單鏈表中的第i個元素,其值通過參數將其返回。建立兩個按值遞增有序的單鏈表,將他們合並成一個按值遞減有序的單鏈表。要求利用原來

#include<stdio.h>
#include<stdlib.h>
#define MAX 20
#define LISTINCREMENT 10

typedef struct{
	int *elem;
	int length;
	int listsize;
}SqList;
void CreatList(SqList &L)
{//建立一個線性表
	L.elem=(int*)malloc(MAX *sizeof(int));
	if(!L.elem)
		return;//exit(0)
	L.listsize=MAX;
	printf("輸入表的長度:");
	scanf("%d",&L.length);
	printf("輸入%d個數:",L.length);
	for(int i=0;i<L.length;i++)
		scanf("%d",&L.elem[i]);
}
void Traverse(SqList L){
	//遍歷
	printf("表中數據為:");
	for(int i=0;i<L.length;i++)
		printf("%3d",L.elem[i]);
	printf("\n");
}
void LocateElem(SqList L,int e){
	//查找
	int i;
	printf("輸入查找的元素:");
	scanf("%d",&e);
	for(i=0;i<L.length;i++)
	{
		if(L.elem[i]==e){
			printf("查找成功,查找元素為%d",L.elem[i]);
			printf("\n");
			return;
		}
	}
	printf("查找失敗");
	printf("\n");
}
int makesureElem(SqList L,int e)
{
	int i;
//確定要刪除的元素
	for(i=0;i<L.length;i++)
	{
		if(L.elem[i]==e)
		{
			printf("要刪除的元素 位置為 %d",i+1);
			printf("\n");
			return (i+1);
		
		}
	}
	
	printf("元素不存在");
	printf("\n");	return 0;
		
}
void ListInsert(SqList &L)
{//插入元素及其要插入的位置
	int i,int e;
	printf("輸入要插入位置及元素\n");
	scanf("%d%d",&i,&e);
	printf("在順序線性表中第%d個位置之前插入新的元素%d。\n",i,e);//在順序線性表L中第i個位置之前插入新的元素e,
	if(i<1||i>L.length+1) return;	//i的合法位置為1<=i<=ListLength(L)+1
	int *p,*q;
	q=&(L.elem[i-1]);
	for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
		*q=e;
	/*表示從鏈表的第i個元素開始一直到最后一個元素往后移一位p=&L.elem[L.length-1]
	意思是p賦初值為鏈表的最后一個元素地址,p>=q表示循環知道p<q的時候結束,--p是使p指針的指向往前移一位*/
	++L.length;
	return;
}
int ListDelete(SqList &L){
	//刪除元素
	int i,int e;
	printf("輸入要刪除的元素");
	scanf("%d",&e);
    i=makesureElem(L,e);
	if((i<1)||(i>L.length)) return 0;//i的合法值為1<=i<=ListLength(L)+1
	else{
		int *p,*q;
		p=&(L.elem[i-1]);
		e=*p;
		q=L.elem+L.length-1;
		for(++p;p<=q;++p)*(p-1)=*p;//被刪除元素之后的元素左移
		--L.length;
		printf("元素被刪除");
	}
return 0;
	        
}	
int main(){
	SqList L;
	CreatList(L);
	Traverse(L);
	LocateElem(L,1);
	ListInsert(L);//	ListInsert(L,3,8);
	Traverse(L);
	ListDelete(L);
	Traverse(L);
	
	return 0;
}

的存儲空間



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM