C言語完成鏈表及其操作。本站提示廣大學習愛好者:(C言語完成鏈表及其操作)文章只能為提供參考,不一定能成為您想要的結果。以下是C言語完成鏈表及其操作正文
#include <stdio.h>
#include <stdlib.h>
//定義節點
typedef struct Node
{
int data;
struct Node * PNext;
}*PNode,Node;
//初始化函數
PNode create_list();//創立節點
//打印出鏈表
void traverse_list(PNode);
//刪除節點pos 從1 開端
void delete_node(PNode,int,int *);
//拔出節點 pos 從1開端
void insert_data(PNode,int ,int );
void main()
{
//int val;
//定義頭指針
PNode PHead=NULL;
PHead=create_list();
//delete_node(PHead,-1,&val);
insert_data(PHead,-2,2);
traverse_list(PHead);
}
PNode create_list()
{
int len;
int i;
int val;
//定義頭節點
PNode PHead=(PNode)malloc(sizeof(Node));
//內存缺乏等狀況會呈現分配內存失敗的狀況 發作錯誤解前往NULL
if(PHead == NULL){
printf("內存分配失敗");
}
PNode Ptail=PHead;
//將頭節點的指針域指向NULL 假如沒有首節點指針域就是NULL
Ptail->PNext=NULL;
/*
思緒:
定義節點ptail,永遠指向尾節點,一開端只要頭結點 頭結點也是尾節點,所以指向頭結點
將新建的PNew節點掛載到ptail節點前面,掛載好之後,ptail指向新建的PNew節點,這樣保證ptail永遠指向尾節點
*/
printf("請輸出初始化節點的數量\n");
scanf("%d",&len);
for(i=0;i<len;i++){
printf("請輸出節點的值");
scanf("%d",&val);
PNode PNew=(PNode)malloc(sizeof(Node));
PNew->data=val;
Ptail->PNext=PNew;
PNew->PNext=NULL;
Ptail=PNew;
}
//前往首節點
return PHead;
}
void traverse_list(PNode PHead)
{
PNode p = PHead->PNext;
//printf("%d\n",PHead->PNext);
if(p == NULL)
{
printf("鏈表為空\n");
exit(0);
}
while(p != NULL){
printf("%d\n",p->data);
p=p->PNext;
}
}
void delete_node(PNode PHead,int pos,int * val)
{
int i=0;
if(PHead->PNext==NULL){
printf("節點為空");
exit(0);
}
if(pos <0){
printf("沒無數據");
exit(0);
}
PNode p=PHead;
PNode t;
PNode r;
while(i != pos){
//printf("%d\n",i=t->data);exit(0);
t=p;
if(i == pos-1){
//printf("%d\n",i=p->PNext->PNext->data);exit(0);
//exit(0);
r=p->PNext;
t->PNext=p->PNext->PNext;
free(r);
r=NULL;
//exit(0);
return;
}
i++;
p=p->PNext;
}
}
void insert_data(PNode PHead,int pos,int val)
{
int i=0;
PNode p=PHead;
while(p != NULL && i<pos-1){
p=p->PNext;
i++;
}
if(p == NULL || i>pos -1){
printf("拔出錯誤");
return ;
}
PNode PNew=(PNode)malloc(sizeof(Node));
if(PNew == NULL){
printf("內存分配失敗");
exit(-1);
}
PNode t=p->PNext;
PNew->data=val;
PNew->PNext=t;
p->PNext=PNew;
}