考研數據結構-線性表
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()函數有點問題,小夥伴試過之後可以留言反饋哦。