c++的程序,运行不了,高手进

[复制链接]
查看11 | 回复0 | 2010-4-11 18:57:28 | 显示全部楼层 |阅读模式
删除和插入都有可能改变head结点,然而用指针的副本是不能改变head的值的,所以删除和插入得用指针的指针,即elemsn **h做形参,&head做实参,要不然就用引用。#include#include#include#includeusing namespace std;typedef struct node{
int data;
struct node *next;}elemsn;/*建立循环链表*/elemsn * creatlink(int a[],int n){
elemsn *h,*p;
int i;
h=(elemsn *)malloc(sizeof(elemsn));
h->data=a[0];
h->next=h;
p = h;
for(i=1;inext=(elemsn *)malloc(sizeof(elemsn));
p = p->next;
p->data=a;
p->next=h;
}
return h;}/*输出单向循环链表节点的数据*/void printnode(elemsn *h){
elemsn *p=h;
do
{
printf("%5d",p->data);
p=p->next;
}while(p != h);
printf("\n");}/*输出单向循环链表节点的个数*/int countnode(elemsn *h){
int count=0;
elemsn *p=h;
do
{
count++;
p=p->next ;
}while(p != h);
return count;}/*删除单向链表中的某个节点*/void delnode(elemsn **h,int pos){
elemsn *p, *q;
p = *h;
for(q=*h; q->next != *h; q=q->next)
{ }
for(int i=1; inext,q=q->next,++i)
{ }
if(p==*h)
{
q->next = p->next;
free(p);
*h = q->next;
}
else
{
q->next = p->next;
free(p);
}}/*插入节点*/void insertnode(elemsn **h,elemsn *s){
elemsn *p,*q=NULL;
p=*h;
do
{
if(p->data data)
{
q=p;
p=p->next;
}
else
break;
}while(p!=*h);
if(q!=NULL)
{
s->next=p;
q->next=s;
}
else
{
for(q=*h; q->next != *h; q=q->next)
{ }
q->next=s;
s->next=*h;
*h = s;
}}int main(){
elemsn *s;
elemsn *head;
//creatlink(int a[],int n);
//delnode(elemsn *h,int (pos));
//insertnode(elemsn *h,elemsn *s);
//creatlink(int a[],int n) ;
//printnode(elemsn *h);
//elemsn *head=NULL,*s;
int a[6]={1,2,3,4,5,6};
int val;
head = creatlink(a,6);
printf("\n 结点个数:%d\n",countnode(head));
delnode(&head,1);
printnode(head);
s=(elemsn *)malloc(sizeof(elemsn));
scanf("%d",&val);
s->data=val;
insertnode(&head,s);
printnode(head);
return 0;}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行