考研數據結構-線性表

考研數據結構-線性表

1.結構

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct node{
	ElemType data;			//數據域
	struct node *next;		//指針域
}LNode,*LinkList;

2.初始化

LinkList GreatLinkList(int n){
	LinkList p,r,list=NULL;
	ElemType e;
	int i;
	for(i=1;i<=n;i++){
		printf("頭結點:");
		scanf("%d",&e);
		p=(LinkList)malloc(sizeof(LNode));		//開闢空間
		p->data=e;
		p->next=NULL;
		if(!list){
			list=p;			//頭指針
		}
		else {
			r->next=p;		//結點加入鏈表
		}
		r=p;
	}
	printf("init finish\n");
	return list;			//返回鏈表頭指針
}

3.插入結點

void insertLinkList(LinkList *list,LinkList q,ElemType e){
	LinkList p;
	p=(LinkList)malloc(sizeof(LNode));		//開闢空間
	p->data=e;
	if(!*list){
		*list=p;					//賦值頭指針
		p->next=NULL;
	}
	else{
		p->next=q->next;			//插入
		q->next=p;
	}
	printf("insert:%d\n",e);
}

4.刪除結點

void delLink(LinkList *list,LinkList q){
	LinkList r;
	if (q==*list){					//若刪除頭結點
		*list=q->next;
		free(q);
	}
	else{							//刪除其他結點
		for(r=*list;r->next!=q;r=r->next){
			if(r->next!=NULL){
				r->next=q->next;
				free(q);			//釋放空間
			}
		}
	}
}

5.銷燬線性表

void destoryLinkList(LinkList *list){
	LinkList p,q;
	p=*list;
	while(p){
		q=p->next;		//移動一個,銷燬一個
		free(p);
		p=q;
	}
	*list=NULL;
}

6.測試代碼

int main() {
	int e,i;
	LinkList l,q;
	q=l=GreatLinkList(1);
	printf("init insert begin\n");
	scanf("%d",&e);
	while(e){
		insertLinkList(&l,q,e);
		q=q->next;
		scanf("%d",&e);
		if(e==0){
			break;
		}
	}
	printf("insert final");
	q=l;
	printf("輸出:\n");
	while (q) {
		printf("%d",q->data);
		q=q->next;
	}
	//刪除第五個
	q=l;
	for(i=0;i<4;i++){
		if(q==NULL){
			printf("表長小於5");
			getche();
			return 0;
		}
		q=q->next;
	}
	delLink(&l,q);
	q=l;
	printf("刪除後:");
	while (q) {
			printf("%d",q->data);
			q=q->next;
		}
	destoryLinkList(&l);				//銷燬鏈表
	return 0;
}

小結:由於使用的是mac的coderunner,所以測試代碼中的getche()函數有點問題,小夥伴試過之後可以留言反饋哦。

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