考研數據結構-順序表

考研數據結構-順序表

一、靜態順序表


1.結構

#include<stdio.h>
#include<stdlib.h>

#define MaxSize = 100
typedef struct{
	int *elem;	//數據類型
	int length;
	int listsize;
}Sqlist;

2.插入操作

void insertSqlist(int Sqlist[],int *len,int i,int item){
	int t;
	if(*len==MaxSize||i<1||i>*len+1){
		printf("插入不合法");
	}
	for(t=*len-1;t>=i-1;t--){
		Sqlist[t+1]=Sqlist[t];		//要插入位置後的元素後移
	}
	Sqlist[i-1]=item;				//插入
	*len=*len+1;					//表長加1
}

3.刪除操作

void deleteSqlist(Sqlist[],int *len,int i){
	int j;
	if(i<0||i>*len){
		printf("刪除不合法");
		return;
	}
	for(j=i;j<=*len-1;j++){
		Sqlist[j-1]=Sqlist[j];	//刪除位置後元素前移
		*len=*len-1;			//表長減1
	}
}

4.測試代碼

int main(){
	int Sqlist[MaxSize];		//創建整型順序表
	int i;
	int len;					//記錄表長
	int item;					//要增加的數字
	int local1;					//要增加的位置
	int local2;					//要刪除的位置
	printf("請輸入六個數字:");
	for(i=0;i<6;i++){
		scanf("%d",&Sqlist[i]);
	}
	len=i;
	printf("\n");
	//循環輸出
	for (i=0;i<len;i++) {
		printf("%d ",Sqlist[i]);
	}
	//插入
	printf("請輸入要插入的位置:");
	scanf("%d",&local);
	printf("請輸入要插入的數字:");
	scanf("%d",&item);
	insertElem(Sqlist,&len, local,item);
	printf("after insert\n");
	for (i=0;i<len;i++) {
			printf("%d ",Sqlist[i]);
		}
	printf("\n");
	//刪除
	printf("請輸入要刪除的位置:");
	scanf("%d",&local2);
	deleteElem(Sqlist, &len, local2);
	for (i=0;i<len;i++) {
				printf("%d ",Sqlist[i]);
			}
	printf("\n");
	return 0;
}

二、動態順序表


1.核心思想

使用指針,使用realloc函數動態分配

2.結構

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10

typedef int ElemType;
//定義結構體
typedef struct{
	int *elem;
	int length;
	int listsize;
}Sqlist;

3.初始化

void initSqlist(Sqlist *L){
	L->elem=(int *)malloc(MaxSize*sizeof(int));
	if(!L->elem){
		exit(0);	
	}
	L->length=0;
	L->listsize=MaxSize;
}

4.插入

void Insert(Sqlist *L,int i,int item){
	ElemType *base,*insertPtr,*p;
	if(i<1||i>L->length+1) exit(0);		//插入位置不合法
	if(L->length==L->listsize){			//長度不夠,自動分配
		base=(ElemType*)realloc(L->elem,(L->listsize+10)*sizeof(ElemType));
		L->elem=base;
		L->listsize=L->listsize+100;
	}
	insertPtr=&(L->elem[i-1]);			//要插入位置的指針
	for(p=&(L->elem[L->length-1]);p>insertPtr;p--){
		*(p+1)=*p;
	}
	*insertPtr=item;
	L->length++;
}

5.刪除

void Delete(Sqlist *L,int i){
	ElemType *delItem,*q;
	if(i<1||i>L->length) exit(0);
	deItem=&(L->elem[i-1]);
	q=L->elem+L->length-1;
	for(++delItem;delItem<=q;++delItem){
		*(delItem-1)=*delItem;
	}
	L->length--;
}

6.測試代碼

與靜態同理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章