初学数据结构,写线性表的程序,参数怎么也传不对。谁能给个例子??

carambo 2003-09-13 12:08:54
最好是用结构体定义的。谢谢!!
...全文
45 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZhangYv 2003-09-13
  • 打赏
  • 举报
回复
#include <iostream.h>
enum boolean{FALSE, TRUE};
template <class T>
struct Node{
T val;
Node *next;
};
template <class T>
class List{
Node<T> *head;
int size;
public:
List()
{
head = NULL;
size = 0;
}
virtual boolean Insert(T val);
boolean Empty();
boolean Delete(T val);
boolean Contains(T val);
void Print();
~List();
};
template <class T>
List<T>::~List()
{
Node<T> *temp;
for (Node<T> *p = head; p;){
temp = p;
p = p->next;
delete temp;
}
}

template <class T>
boolean List<T>::Empty()
{
if (head)
return FALSE;
else
return TRUE;
}
template <class T>
boolean List<T>::Insert(T x)
{
Node<T> *node = new Node<T>;
if (node){
node->val = x;
node->next = head;
head = node;
size++;
return TRUE;
}
return FALSE;
}

template <class T>
boolean List<T>::Delete(T x)
{
Node<T> *temp;
if (Empty())
return FALSE;
if (head->val == x){
temp = head->next;
delete head;
size--;
head = temp;
return TRUE;
}
for (Node<T> *p = temp = head; p; temp = p, p = p->next)
if (p->val == x){
temp->next = p->next;
delete p;
size--;
return TRUE;
}
return FALSE;
}

template <class T>
boolean List<T>::Contains(T x)
{
for (Node<T> *p = head; p; p = p->next)
if (p->val == x)
return TRUE;
return FALSE;
}

template <class T>
void List<T>::Print()
{
for (Node<T> *p = head; p ; p = p->next)
cout << p->val << " ";
cout << "\n";
}

void main()
{
List<int> intlist;
int i;
for (i = 0; i < 10; i++)
intlist.Insert(i);
intlist.Print();
intlist.Delete(1);
intlist.Delete(2);
intlist.Print();

List<float> floatlist;
floatlist.Insert(3.1);
floatlist.Insert(1.5);
floatlist.Print();

List<char *> charlist;
charlist.Insert("program.");
charlist.Insert("my ds ");
charlist.Insert("is ");
charlist.Insert("This ");
charlist.Print();
}贴一个C语言写的,带表头结点的单链表几个基本运算:
#include <stdio.h>
#include <malloc.h>
struct Link{
int i;
Link *next;
};
Link *Locate(Link *head, int i)
{
Link *p;
for (p = head; p->next; p = p->next)
if (p->next->i == i)
break;
return p;
}
void Insert(Link *head, int i)
{
Link *temp;
temp = (Link*) malloc (sizeof(Link));
temp->i = i;
temp->next = head->next;
head->next = temp;
}
void Delete(Link *head, int i)
{
Link *p;
p = Locate(head, i);
if (p->next){
Link *t;
t = p->next;
p->next = p->next->next;
free(t);
printf("%s%d%s\n", "Delete element ", i, " Success!");
} else
printf("%s\n", "The Node Not Exist!");
}
int Empty(Link *head)
{
if (head->next)
return 0;
else
return 1;
}
void DelAll(Link *head)
{
Link *p, *r;
p = head->next;
while (p){
r = p->next;
free(p);
p = r;
}
head->next = NULL;
}
void MakeNull(Link *head)
{
head->next = NULL;
}
void Print(Link *head)
{
Link *p;
for (p = head->next; p; p = p->next)
printf("%d\n", p->i);
}
void main()
{
Link *head;
int n, i, k;
head = (Link *) malloc (sizeof(Link));
MakeNull(head);
printf("%s", "Please Input n = ");
scanf ("%d", &n);
for (i = 0; i < n; i++){
printf("%s", "Input k = ");
scanf("%d", &k);
Insert(head, k);
}
Delete(head, 1);
Delete(head, 2);
if (Empty(head))
printf("%s", "Link is Empty!");
else
Print(head);
DelAll(head);
if (Empty(head))
printf("%s", "Link is Empty!");
else
printf("%s", "Delete Link Error!");
}



csdn5211 2003-09-13
  • 打赏
  • 举报
回复
最好把你的程序贴上来,这样大家都方便。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧