數據結構C語言版(單鏈表的插入跟刪除)

單鏈表在VC 6.0的環境下運行的代碼如下

#include<stdlib.h>
#include<stdio.h>
typedef int ElemType;
typedef int Status;
#define ERROR 0;
#define OK 1;

typedef struct LNode{
 ElemType data;
 struct LNode *next;
}LNode,*LinkList;

Status GetElem_L(LinkList L,int i,ElemType &e){
LinkList p;
p=L->next;int j=1;
while(p&&j<i){
p=p->next;++j;}
if(!p||j>i)return ERROR;
e=p->data;
return OK;
}

//插入元素
Status ListInsert_L(LinkList &L,int i,ElemType e){  //在帶頭節點的單連線性表L中的第i個位置之前插入元素e

 LinkList p;
 p=L;int j=0;
 while(p&&j<i-1){p=p->next;++j;}     //尋找第i-1個結點
 if(!p||j>i-1)return ERROR;         //i小於1或大於表長加1
 LinkList s;
 s=(LinkList)malloc(sizeof(LNode));   //生成新結點
 s->data=e;s->next=p->next;          //插入L中
 p->next=s;
 return OK;
}
//刪除元素
Status ListDelete_L(LinkList &L,int i,ElemType &e){   //在帶頭結點的單鏈線性表L中,刪除第i個元素,並由e返回其值
LinkList p;int j;
p=L; j=0;
while(p->next&&j<i-1){
p=p->next;++j;
}

if(!p->next||j>i-1)return ERROR;                      //刪除位置不合理
LinkList q;
q=p->next;p->next=q->next;                            //刪除並釋放結點
e=q->data;free(q);
return OK;
}
//創建單鏈線性表
void CreateList_L(LinkList &L,int n){


      //逆序輸入n個元素的值,建立帶表頭結點的單鏈線性表L   
	L=(LinkList) malloc(sizeof(LNode));
	L->next=NULL;                   //先建立一個帶頭結點的單鏈表
	for(int i=n;i>0;--i){
    LinkList p;
	p=(LinkList)malloc(sizeof(LNode));  //生成新結點
    scanf("%d",&p->data);       //輸入元素值
	p->next=L->next;L->next=p;//插入到表頭
}
}
//輸出鏈表的元素
void Print_L(LinkList L,int n){	
LinkList m;int t;
m=L->next;
	for(t=1;t<=n;t++){
		printf("%-4d",m->data);m=m->next;		
	}
}
void main()
{
   	printf("請輸入單鏈表的元素個數:");
        int n;
	scanf("%d",&n);
    LinkList L;
	CreateList_L(L,n);
	printf("單鏈表元素爲\n");
	Print_L(L,n);
    printf("\n請輸入插入位置和要插入的元素值:");
	int i;
    ElemType e;
    scanf("%d%d",&i,&e);
    ListInsert_L(L,i,e);
	Print_L(L,n+1);
    printf("\n刪除的位置爲:");
	int a;
	ElemType b;
    scanf("%d",&a);
    ListDelete_L(L,a,b);
    printf("\n刪除的元素值爲:%d",b);
    printf("\n");
}

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