C语言实现链表
2013-07-20 20:00
197 查看
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node {
int data;
struct Node * pNode
} NODE,* PNODE;
PNODE create_list();
void show_list(PNODE);
int is_emp(PNODE);
int length_list(PNODE);
int insert_list(PNODE,int,int);
int delete_list(PNODE,int,int *);
void sort_list(PNODE);
int main(void) {
PNODE p = create_list();
sort_list(p);
insert_list(p,3,99);
show_list(p);
int i;
delete_list(p,3,&i);
show_list(p);
printf("\n");
printf("%d",i);
return 0;
}
int delete_list(PNODE phead ,int pos,int * val){
PNODE p = phead;
int i =0;
while(NULL!=p && i<pos-1) {
p=p->pNode;
i++;
}
if(i>pos-1|| NULL == p){
return 0;
}
*val = p->pNode->data;
p->pNode=p->pNode->pNode;
return 1;
}
int insert_list(PNODE phead,int pos,int val){
PNODE p = phead;
int i =0;
while(NULL!=p && i<pos-1) {
p=p->pNode;
i++;
}
if(i>pos-1|| NULL == p){
return 0;
}
PNODE pnew = (PNODE)malloc(sizeof(NODE));
PNODE temp;
pnew ->data=val;
temp = p->pNode;
p->pNode=pnew;
pnew->pNode = temp;
return 1;
}
void sort_list(PNODE phead) {
int i,j,k;
int len = length_list(phead);
PNODE p,q;
for(i=0,p=p->pNode;i<len-1;p=p->pNode,i++) {
for(j=i+1,q=p->pNode;j<len;q=q->pNode,j++) {
if(p->data > q->data) {
k=q->data;
q->data=p->data;
p->data=k;
}
}
}
return;
}
int is_emp(PNODE phead) {
if(phead -> pNode == NULL) {
return 1;
} else {
return 0;
}
}
int length_list(PNODE phead) {
int i =0;
PNODE p = phead->pNode;
while(NULL != p) {
p=p->pNode;
i++;
}
return i;
}
PNODE create_list() {
int length = 0;
int val=0;
int i =0;
printf("input the list len: ");
scanf("%d",&length);
PNODE pHead = (PNODE)malloc(sizeof(NODE));
PNODE tail=pHead;
tail->data=0;
tail->pNode = NULL;
if(NULL == pHead) {
printf("t is error");
}
for(i=0; i<length; ++i) {
printf("the %d node value: ",i+1);
scanf("%d",&val);
PNODE pnew = (PNODE)malloc(sizeof(NODE));
pnew ->data=val;
tail->pNode=pnew;
pnew->pNode=NULL;
tail=pnew;
}
return pHead;
}
void show_list(PNODE Plist) {
PNODE next = Plist->pNode;
while(NULL != next) {
printf("%d ",next->data);
next = next->pNode;
}
printf("\n");
return;
}
#include<malloc.h>
#include<stdlib.h>
typedef struct Node {
int data;
struct Node * pNode
} NODE,* PNODE;
PNODE create_list();
void show_list(PNODE);
int is_emp(PNODE);
int length_list(PNODE);
int insert_list(PNODE,int,int);
int delete_list(PNODE,int,int *);
void sort_list(PNODE);
int main(void) {
PNODE p = create_list();
sort_list(p);
insert_list(p,3,99);
show_list(p);
int i;
delete_list(p,3,&i);
show_list(p);
printf("\n");
printf("%d",i);
return 0;
}
int delete_list(PNODE phead ,int pos,int * val){
PNODE p = phead;
int i =0;
while(NULL!=p && i<pos-1) {
p=p->pNode;
i++;
}
if(i>pos-1|| NULL == p){
return 0;
}
*val = p->pNode->data;
p->pNode=p->pNode->pNode;
return 1;
}
int insert_list(PNODE phead,int pos,int val){
PNODE p = phead;
int i =0;
while(NULL!=p && i<pos-1) {
p=p->pNode;
i++;
}
if(i>pos-1|| NULL == p){
return 0;
}
PNODE pnew = (PNODE)malloc(sizeof(NODE));
PNODE temp;
pnew ->data=val;
temp = p->pNode;
p->pNode=pnew;
pnew->pNode = temp;
return 1;
}
void sort_list(PNODE phead) {
int i,j,k;
int len = length_list(phead);
PNODE p,q;
for(i=0,p=p->pNode;i<len-1;p=p->pNode,i++) {
for(j=i+1,q=p->pNode;j<len;q=q->pNode,j++) {
if(p->data > q->data) {
k=q->data;
q->data=p->data;
p->data=k;
}
}
}
return;
}
int is_emp(PNODE phead) {
if(phead -> pNode == NULL) {
return 1;
} else {
return 0;
}
}
int length_list(PNODE phead) {
int i =0;
PNODE p = phead->pNode;
while(NULL != p) {
p=p->pNode;
i++;
}
return i;
}
PNODE create_list() {
int length = 0;
int val=0;
int i =0;
printf("input the list len: ");
scanf("%d",&length);
PNODE pHead = (PNODE)malloc(sizeof(NODE));
PNODE tail=pHead;
tail->data=0;
tail->pNode = NULL;
if(NULL == pHead) {
printf("t is error");
}
for(i=0; i<length; ++i) {
printf("the %d node value: ",i+1);
scanf("%d",&val);
PNODE pnew = (PNODE)malloc(sizeof(NODE));
pnew ->data=val;
tail->pNode=pnew;
pnew->pNode=NULL;
tail=pnew;
}
return pHead;
}
void show_list(PNODE Plist) {
PNODE next = Plist->pNode;
while(NULL != next) {
printf("%d ",next->data);
next = next->pNode;
}
printf("\n");
return;
}
相关文章推荐
- c语言实现单链表
- [原]C语言实现双向链表删除节点、插入节点、双向输出等操作
- C语言实现环形链表
- 单链表插入和删除结点c语言的实现
- C语言实现链表之双向链表(五)头结点前插入结点
- C语言实现链表
- C语言实现链表之双向链表(十四)链表打印
- 链表的C语言实现之单链表的实现
- C语言实现链表之单向链表(十二)判断链表是否为空和获取链表长度
- 链表的初始化、遍历、删除、插入、判断是否为空、求长度 C语言实现
- C语言实现双链表
- 数据结构基础(3)---C语言实现单链表
- 数据结构.单链表(C语言实现)
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- c语言实现双向循环链表
- 双向链表代码实现-C语言
- c语言实现通用数据结构(一):通用链表
- 链表(C语言实现)
- C语言实现顺序链表
- 链表的C语言实现之循环链表及双向链表