【数据结构】要求:a.输入一组整型元素序列,建立线性表。b.实现该线性表的遍历。 c.在该线性表中查找某一元素,查找成功显示查找元素,否则显示d.在该线性表中删除或插入指定元素。

顺序存储结构

// An highlighted block
#include<stdio.h>
#include<stdlib.h>
#define ListInitSize 10
#define ListIncrement 10
typedef struct{
	int *base;
	int length;
	int listsize; 
}SqList;
void InitSqList(SqList &L){
	L.base=(int*)malloc(ListInitSize*sizeof(int));
	if(!L.base)
	exit(0);
	L.listsize = ListInitSize;
	printf("请输入线性表长度:\n");
	scanf("%d",&L.length);
	printf("请输入%d个整形元素:\n",L.length);
	for(int i=0;i<L.length;i++)
	scanf("%d",&L.base[i]);
}
void TraversalList(SqList &L){
	printf("**********遍历线性表*************\n"); 
	for(int i=0;i<L.length;i++)
	printf("%3d",L.base[i]); 
	printf("\n");
}
void LocateElem(SqList &L,int &e){
	int i = 0;
	while(i<L.length){
		if(L.base[i] == e){
			printf("元素%d在线性表中是第%d位\n",e,i+1);
			break;
		}
		else 
		i++;
	}
	if(i >= L.length)
	printf("查找失败\n"); 
}
void ListInsert(SqList &L,int &i,int &e){
	if(i<1||i>L.length+1){
		printf("输入i值非法。\n");
		exit(0);
	}
	if(L.length>=L.listsize){
		int *newbase = (int*)realloc(L.base,L.listsize+ListIncrement*sizeof(int));
		if(!newbase)
		exit(0); 
	}
	for(int j=L.length-1;j>=i-1;j--)
		L.base[j+1] = L.base[j];
	L.base[i-1] = e;
	L.length++;		
}
void ListDelete(SqList &L,int i,int &e){
	if(i<1||i>L.length+1){
		printf("输入i值非法。");
		exit(0);
	}
	e = L.base[i-1];
	printf("删除元素的值为:%d\n",e); 
	for(int j=i;j<L.length;j++)
	L.base[j-1] = L.base[j];
	L.length--;
}
int main(){
	SqList L;
	int i,e;
	InitSqList(L);
	TraversalList(L);
	printf("请输入需要查找的元素:\n");
	scanf("%d",&e);
	LocateElem(L,e); 
	printf("请输入需要插入的元素和想插入的位置:\n");
	scanf("%d%d",&e,&i);
	ListInsert(L,i,e); 
	TraversalList(L);
	printf("请输入要删除的元素位置:\n");
	scanf("%d",&i);
	ListDelete(L,i,e);
	TraversalList(L);
	return 0; 
}

链式存储结构``

#include<stdio.h>
#include<stdlib.h>
#define ListInitSize 100
typedef struct LNode{
	int data;
	struct LNode *next;
}LNode,*LinkList;

void CreatList(LinkList &L,	int &n){
	L = (LinkList)malloc(sizeof(LNode));
	LinkList pre = L;
	printf("请输入%d个整形元素:\n",n);
	for(int i=0;i<n;i++){
		LinkList p = (LinkList)malloc(sizeof(LNode));
		scanf("%d",&p->data);
		pre->next = p;
		pre = p;
	}
	pre->next = NULL;
}
void TraversalList(LinkList &L){
	LinkList p = L->next;
	printf("**********遍历线性表*************\n"); 
	while(p){
		printf("%3d",p->data); 
		p = p->next;
	}
	printf("\n");
}
void LocateElem(LinkList &L,int &e){
	int i = 0;
	LinkList p = L->next;
	while(p&&p->data != e){
		i++;
		p = p->next;
	}
	if(p)
	printf("元素%d在线性表中是第%d位\n",e,i+1);
	else
	printf("查找失败\n"); 
}
void ListInsert(LinkList &L,int &i,int &e){
	int j = 0;
	LinkList p = L;
	while(p&&j<i-1){
		j++;
		p = p->next;
	}	
	if(!p||j>i-1){
		printf("输入i值非法\n");
		exit(0);
	}
	LinkList s = (LinkList)malloc(sizeof(LNode));
	s->data = e;
	s->next = p->next;
	p->next = s;
}
void ListDelete(LinkList &L,int i,int &e){
	int j = 0;
	LinkList p =L;
	while(p->next&&j<i-1){
		j++;
		p = p->next;
	}
	if(!(p->next)||j>i-1){
		printf("输入i值非法\n");
		exit(0);
	}
	LinkList s = (LinkList)malloc(sizeof(LNode));
	s = p->next;
	p->next = s->next;
	e = s->data;
	printf("删除元素的值为:%d\n",e); 
	free(s);
}
int main(){
	LinkList L;int n,e,i;
	printf("请输入线性表长度:\n");
	scanf("%d",&n);
	CreatList(L,n);
	TraversalList(L);
	printf("请输入想要查找元素:\n");
	scanf("%d",&e);
	LocateElem(L,e);
	printf("请输入需要插入的元素和想插入的位置:\n");
	scanf("%d%d",&e,&i);
	ListInsert(L,i,e);
	TraversalList(L);
	printf("请输入要删除的元素位置:\n");
	scanf("%d",&i);
	ListDelete(L,i,e);
	TraversalList(L);
	return 0;
}
发布了19 篇原创文章 · 获赞 8 · 访问量 3870

猜你喜欢

转载自blog.csdn.net/weixin_45087775/article/details/101832083